2012-12-24 20 views
9

मैं उल्का के साथ शुरू कर रहा हूं और मोंगो के साथ कुछ मदद की ज़रूरत है। मेरे पास नामों का संग्रह है जो मैं एक सूची में प्रदर्शित कर रहा हूं और अन्य मानदंडों के आधार पर डेटाबेस में कुछ प्रविष्टियों के एक चर को अद्यतन करने में सक्षम होना चाहता हूं। असल में मैं क्या करना चाहता हूं:उल्का/मोंगो: संग्रह में कुछ तत्व ढूंढना और अपडेट करना

प्रत्येक प्रविष्टि जहां विशेषता ए = सत्य और बी = सत्य, विशेषता सी को गलत होने के लिए बदलें।

अभी तक, मैं यह पता लगाने की कोशिश कर रहा हूं कि कैसे मोंगो संग्रह के तत्वों पर "प्रत्येक के लिए" लूप को संभाल सकता है, और प्रत्येक तत्व के लिए जांच करें कि क्या ए और बी धारण करते हैं, और फिर collection.update (तत्व, {सी: झूठा})। यह मैंने सोचा की तुलना में बहुत अधिक समस्याग्रस्त साबित हो रहा है।/कैसे संग्रह में काम

for (i = 0; i < collection.find().count(); i++){ 
    if (collection[i].A===true && collection[i].B===true) 
     collection.update(collection[i], {$set: {C: false}}); 
}; 

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

उत्तर

14

बेशक मुझे पता है कि पोस्ट करने के बाद यह सही कैसे करें, और निश्चित रूप से यह उल्का दस्तावेज में सुझाया गया है!

और, बेशक, यह एक सरल उपाय है:

collection.update({A: true, B: true}, {$set: {C:false}}); 
+2

आप अपना उत्तर स्वीकार कर सकते हैं :-) – Rahul

+1

यह चयनकर्ता से मेल खाने वाले पहले दस्तावेज़ के लिए काम करता है। आप की जरूरत है। collection.update ({ए: सत्य, बी: सत्य}, {$ सेट: {सी: झूठा}}, 0,1); सभी पंक्तियों के लिए। –

+2

@DavidWihl कई पंक्तियों को संपादित करने के लिए आपको {multi: true} को 0,1 के बजाय तीसरे पैरामीटर के रूप में सेट करने की आवश्यकता है (उल्का दस्तावेज़, http://docs.meteor.com/#update देखें)। तो यह होगा: collection.update ({ए: सत्य, बी: सत्य}, {$ सेट: {सी: गलत}}, {बहु: सत्य}) –

9

जैसा कि पहले ही टिप्पणी में सुझाव दिया, सही जवाब है:

collection.update({A: true, B: true}, {$set: {C:false}}, {multi: true}); 

(कम से कम शुद्ध MongoDB में, see there)।

multi: true के बिना यह मानदंड से मेल खाने वाला केवल एक दस्तावेज़ बदल देगा।

उल्का में यह थोड़ा और मुश्किल है, क्योंकि आपको इसे मिलान करने के अलावा क्लाइंट-साइड अपडेट करने की अनुमति नहीं है (इसलिए विभिन्न मानदंडों की कोई संभावना नहीं है, multi के लिए कोई संभावना नहीं है), http://docs.meteor.com/#update देखें।

आप सभी पाउंड पर पुनरावृत्त कर सकते हैं, लेकिन ऐसे कोड सर्वर-पक्ष को चलाने के लिए बेहतर होगा।

+0

'बहु: सत्य' अब मेटियर द्वारा समर्थित है: http://docs.meteor.com/#/full/update –

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