सबसे पहले, यदि आप अपने दस्तावेज़ों को एक सरणी की तरह संग्रहीत कर रहे हैं, तो आप उन्हें केवल एक सरणी के रूप में क्यों नहीं संग्रहीत करते हैं? यदि आप एक रिलेशनल डेटाबेस बैकग्राउंड से आते हैं, तो मैं देख सकता हूँ कि आप इसे इस तरह से स्टोर करने के लिए कैसे ललचाएँगे, लेकिन मोंगो में, यदि यह एक ऐरे की तरह है, तो इसे केवल एक ऐरे के रूप में स्टोर किया जाना चाहिए।
{
"_id" : ObjectId("52e5361f30f28b6b602e4c7f"),
"0" : "h",
"1" : "o",
"2" : "m"
}
होना चाहिए:
{
"_id" : ObjectId("52e5361f30f28b6b602e4c7f"),
"keys" : [ "h", "o", "m" ]
}
इस मामले में, Mongo के पास $addToSet
. नामक एक आसान ऑपरेटर है यह ठीक वैसे ही काम करेगा जैसे $push
सिवाय इसके कि यह केवल इसे सरणी में जोड़ देगा यदि यह अस्तित्व में नहीं है। ऑपरेशन कुछ इस तरह दिखेगा:
collection.update( query, { $addToSet : { 'keys' : 'l' }}, callback );
// add key 'l'
collection.update( query, { $addToSet : { 'keys' : 'm' }}, callback );
// looks in document, sees 'm' in array, and does nothing
संपादित करें:
अद्यतन के साथ, यह सरणी में कुंजी जोड़ देगा यदि यह वहां नहीं है, लेकिन यदि आप केवल यह जानना चाहते हैं कि यह मौजूद है या नहीं, तो मुझे लगता है कि findOne
का उपयोग करने का सबसे अच्छा तरीका होगा :
// find the doc by _id and the value you want in keys, returns null if it's not a match
collection.findOne({ _id : 52e5361f30f28b6b602e4c7f, 'keys' : 'l' }, function(err, doc) {
if( doc == null ) {
// do whatever you need to do if it's not there
} else {
// do whatever you need to if it is there
}
db.close();
}
अपना इंसर्ट यथावत रखने के लिए, आपको बस Keys
को बदलना होगा करने के लिए:
Keys = { 'keys' : [ 'key1', 'key2', 'key3' ] };
और डालने को अन्यथा बदलने की आवश्यकता नहीं है। साथ ही, अपने संग्रह में, आप _id
. को बदलना चाह सकते हैं username
होने के लिए या एक username
जोड़ें अपने दस्तावेज़ के लिए फ़ील्ड।