2012-09-12 16 views
5
TENANT 
    { "_ID" : 11, NAME : "ruben", OPERATION :[{OPERATION_ID: 100, NAME : "Check"}] } 

OPERATION_ID को सेट करने के लिए कैसे डुप्लिकेट मानों से बचने के लिए अद्वितीय है और प्राथमिक कुंजी जैसे शून्य मानों से बचने के लिए अद्वितीय है? ताकि दो किरायेदारों दोनों हो सकते हैंमोंगोड अद्वितीय क्षेत्र

db.tenants.ensureIndex({ operation.OPERATION_ID : 1 }, { unique:true, sparse:true }); 

जब आप OPERATION_IDs किरायेदार प्रति अद्वितीय होना चाहता हूँ,:

उत्तर

12

आप सभी किरायेदारों के लिए अद्वितीय होना OPERATION_IDs चाहते हैं, तो आप ऐसा कर सकते हैं operation_ID: 100 लेकिन कोई किरायेदार ऑपरेशन_आईडी नहीं हो सकता है: 100 बार दो बार, आपको इंडेंट में किरायेदार का _id जोड़ना होगा ताकि _id और operation_id का कोई भी संयोजन अद्वितीय हो।

db.tenants.ensureIndex({ _id: 1, operation.OPERATION_ID : 1 }, { unique:true, sparse:true }); 
4

OPERATION.OPERATION_ID पर एक unique index जोड़ा जा रहा है यह सुनिश्चित करेंगे कि कोई दो अलग-अलग दस्तावेजों में एक ही OPERATION_ID साथ संचालन में एक तत्व शामिल होंगे।

यदि आप एक ही दस्तावेज़ को OPERATION_ID के साथ OPERATION में दो तत्व रखने से रोकना चाहते हैं, तो आप अद्वितीय अनुक्रमणिका का उपयोग नहीं कर सकते हैं; आपको सेट अपडेट ऑपरेटर (जैसे $ set और $ addToSet) का उपयोग करना होगा। आप एक subdocument OPERATION_ID द्वारा keyed में संचालन बदल सकती है, इसलिए जैसे:

{ "_ID" : 11, NAME : "ruben", OPERATION : {"100" : {NAME : "Check"} }} 

तो फिर तुम $ सेट के साथ अद्यतन जारी करके विशिष्टता लागू कर सकते हैं; उदाहरण के लिए:

db.<collection>.update({NAME: "ruben"}, {$set: {"OPERATION.100.NAME": "Uncheck"}}) 

शून्य मान के बारे में: MongoDB खेतों पर गैर-शून्य की कमी की सुविधा नहीं है (यह भी एक ही प्रकार के लिए किसी दिए गए क्षेत्र के लिए मजबूर नहीं करता है), तो आप में यह सुनिश्चित करना होगा अपने अनुप्रयोग जो शून्य मान डाले नहीं जाते हैं।

+0

हाय मूल्यों को सम्मिलित करना चाहते हैं लेकिन एक अनूठा नाम है, जैसे लॉग इन करने के लिए उपयोगकर्ता नाम, लॉगिन संग्रह में डालने के दौरान उपयोगकर्ता नाम अद्वितीय कैसे बनाएं –

संबंधित मुद्दे