2012-10-23 18 views
6

पंक्तियों पर अद्यतन करते समय मैं रिकॉर्ड के सरणी में प्रत्येक फ़ील्ड पर एक mongodb अद्यतन करने का प्रयास कर रहा हूं।

एक उदाहरण स्कीमा नीचे है:

{ 
    "_id" : ObjectId("508710f16dc636ec07000022"), 
    "summary" : "", 
    "uid" : "ABCDEF", 
    "username" : "bigcheese", 
    "name" : "Name of this document", 
    "status_id" : 0, 
    "rows" : [ 
     { 
      "score" : 12, 
      "status_id" : 0, 
      "uid" : 1 
     }, 
     { 
      "score" : 51, 
      "status_id" : 0, 
      "uid" : 2 
     } 
    ] 
} 

अब तक मैं इस तरह एक अद्यतन प्रदर्शन करने में सक्षम किया गया है:

db.mycollection.update({"uid":"ABCDEF","rows.uid":1}, {$set:{"rows.$.status_id":1}},false,false) 

हालांकि, मैं कैसे एक अद्यतन प्रदर्शन करने के लिए के रूप में संघर्ष कर रहा हूँ कि सभी सरणी रिकॉर्ड्स को status_id 1 (उदाहरण के लिए) में अपडेट कर देगा।

can't append to array using string field name [$]

मैं काफी नहीं भाग्य के साथ थोड़ी देर के लिए प्रयास किया है:

db.mycollection.update({"uid":"ABCDEF"}, {$set:{"rows.$.status_id":1}},false,true) 

हालांकि मैं त्रुटि मिलती है:

नीचे मैं इसे कैसे काम करना चाहिए की कल्पना है। कोई संकेतक?

उत्तर

6

आप उन सरणी तत्वों के 'वाइल्डकार्ड' अपडेट को नहीं कर सकते जिन्हें आप ढूंढ रहे हैं। मुझे लगता है कि आप सबसे अच्छा कर सकते हैं एक साथ प्रत्येक तत्व के status_id इस तरह के मान सेट करें:

db.mycollection.update(
    {"uid":"ABCDEF"}, 
    {$set:{ 
     "rows.0.status_id":1, 
     "rows.1.status_id":1 
    }}, false, true); 
+0

ठीक धन्यवाद। मुझे लगता है कि मैं सिर्फ सरणी को पार कर दूंगा। – HGPB

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