मेरे पास स्प्रिंग डेटा के साथ मोंगोडीबी के बारे में कोई प्रश्न है।MongoDB एंबेडेड ऑब्जेक्ट्स में कोई आईडी नहीं है (शून्य मान)
@Document
public class Deal {
@Id
private ObjectId _id;
private Location location;
private User user;
private String description;
private String title;
private String price;
private boolean approved;
private Date expirationDate;
private Date publishedDate;
}
@Document
public class Location {
@Id
private ObjectId _id;
private Double latitude;
private Double longitude;
private String country;
private String street;
private String zip;
}
@Document
public class User {
@Id
private ObjectId _id;
private String email;
private String password;
private String profile_image_url;
private Collection<Deal> deals = new ArrayList<Deal>();
}
इन डोमेन मैं सफलतापूर्वक CRUD कार्य कर सकते हैं
: मैं इन डोमेन श्रेणियां होती हैं। केवल एक समस्या है। डील के साथ उपयोगकर्ता को सहेजते समय, सौदों और स्थान को मोंडोडीबी में सहेजते समय _id को शून्य पर सेट किया जाता है। मोंगोडीबी एम्बेडेड ऑब्जेक्ट्स के लिए अद्वितीय आईडी क्यों नहीं बना सकता?
एक सौदा के साथ एक उपयोगकर्ता बचाने के बाद परिणाम:
{ "_id" : ObjectId("4fed0591d17011868cf9c982"),
"_class" : "User",
"email" : "[email protected]",
"password" : "mimi",
"deals" : [
{ "_id" : null,
"location" : { "_id" : null,
"latitude" : 2.22,
"longitude" : 3.23445,
"country" : "Denmark",
"street" : "Denmark road 77",
"zip" : "2933" },
"description" : "The new Nexus 7 Tablet. A 7 inch tablet from Google.",
"title" : "Nexus 7",
"price" : "1300",
"approved" : false,
"expirationDate" : Date(1343512800000),
"publishedDate" : Date(1340933521374) } ] }
आप परिणाम से देख सकते हैं, डील और स्थान आईडी शून्य पर सेट है।
एक आईडी रूट दस्तावेज़ की पहचान करता है, उप-दस्तावेज नहीं। कोई कारण नहीं है कि आप एक नेस्टेड दस्तावेज़ के लिए एक आईडी उत्पन्न करना चाहते हैं क्योंकि मोंगोडीबी केवल शीर्ष स्तर के दस्तावेज़ों को पुनर्प्राप्त कर सकता है। आपको वास्तव में नेस्टेड आईडी की क्या आवश्यकता है? –
मुझे केवल सौदों की खोज करने की आवश्यकता है, न कि उपयोगकर्ता। अब मुझे उपयोगकर्ता से खोजना है और फिर लूप ने प्रोग्राम में प्रत्येक सौदे को प्रोग्रामेटिक रूप से फेंक दिया है। – Millad
आईडी के पास ऐसा करने के लिए कुछ भी नहीं है जिसे आप खोज सकते हैं। '{' Deals.price 'की खोज करना बिल्कुल ठीक है: {$ gt: 1000}} '। फिर भी, यह क्वेरी उस 'उपयोगकर्ता' ऑब्जेक्ट को वापस कर देगी जिसे आपको मैन्युअल रूप से 'डील' को खींचना होगा। यह एक मोंगोडीबी सीमा है, स्प्रिंग डेटा द्वारा निहित कुछ भी नहीं। –