2012-08-15 20 views
29

मुझे एक कॉल का उपयोग करके मोंगोज़ में एकाधिक मानों को एक सरणी में धक्का देना होगा। मैंने इसे एक छोटे सरणी का उपयोग करके करने की कोशिश की लेकिन सरणी को उप-सरणी के रूप में डाला जा रहा है।एक कॉल के साथ मोंगोज़ में किसी सरणी में ऑब्जेक्ट्स की सरणी को कैसे दबाया जाए?

{ "_id" : ObjectId("502b0e807809d79e84403606"), "name" : "fluffy", "values" : [ 2, 3 ,2 ,3, 2, 3] } 

एक और बात मैंने देखा है कि था:

{ "_id" : ObjectId("502b0e807809d79e84403606"), "name" : "fluffy", "values" : [ [ 2, 3 ], [ 2, 3 ], [ 2, 3 ] ] } 

जो मैं चाहता जबकि कुछ इस तरह है:

var kittySchema = new mongoose.Schema({ 
     name: String, 
     values: [Number] 
}); 

var Kitten = db.model('Kitten', kittySchema); 
Kitten.update({name: 'fluffy'},{$push: {values:[2,3]}},{upsert:true},function(err){ 
     if(err){ 
       console.log(err); 
     }else{ 
       console.log("Successfully added"); 
     } 
}); 

बुला उपरोक्त कोड का परिणाम तीन बार नीचे परिणाम देता है सरणी (मानों) में प्रकार को संख्या के रूप में निर्दिष्ट किया गया है, तो 'सख्त' विकल्प यह सुनिश्चित नहीं करेगा कि संख्याओं के अलावा कुछ भी नहीं डाला गया है? इस मामले में एक और सरणी डालने की अनुमति दी जा रही है।

उत्तर

39

पदावनत $ धक्का $ का उपयोग कर प्रत्येक

आपका उदाहरण करीब है नीचे अन्य समाधान देखते हैं, लेकिन आप $pushAll बजाय $push चाहते प्रत्येक मान (अलग से जोड़ा बल्कि values सरणी पर एक और सरणी दबाव डालने के बजाए के लिए):

var Kitten = db.model('Kitten', kittySchema); 
Kitten.update({name: 'fluffy'},{$pushAll: {values:[2,3]}},{upsert:true},function(err){ 
     if(err){ 
       console.log(err); 
     }else{ 
       console.log("Successfully added"); 
     } 
}); 
+16

एनबी:: // www आप भी [$ addToSet] (http को देखने के लिए चाहते हो सकता है .mongodb.org/display/DOCS/अद्यतन/# अद्यतन-% 24addToSetand% 24each), जिसका उपयोग केवल सरणी में मान जोड़ने के लिए किया जा सकता है यदि वे पहले से नहीं हैं। – Stennie

+0

धन्यवाद स्टेनी! यह काम करता है। मैं प्रलेखन में इस भाग को याद किया। –

+0

@ स्टेनी यह केवल व्यक्तिगत तत्वों के लिए काम करता है, न कि एरे को संयोजित करने के लिए। – Tom

20

(Dec-2014 अद्यतन) MongoDB2.4 जब से तुम उपयोग करना चाहिए:

Kitten.update({name: 'fluffy'}, {$push: {values: {$each: [2,3]}}}, {upsert:true}, function(err){ 
     if(err){ 
       console.log(err); 
     }else{ 
       console.log("Successfully added"); 
     } 
}); 
+0

यदि '{name:" fluffy "} के साथ कोई दस्तावेज़ मौजूद नहीं है, तो क्या यह {{upsert: true} 'बनाता है ?; भी, अगर मैं '{upsert: true, new: true} 'करता हूं, तो क्या मैं फ़ंक्शन (त्रुटि, परिणाम) {} कर सकता हूं और परिणामस्वरूप सभी दस्तावेजों को बनाया/अपडेट कर सकता हूं? – Besto

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