2010-08-26 6 views
8

मान लिया जाये कि मैं निम्नलिखित दस्तावेज़ संरचना है:mongo db में नेस्टेड सरणी में ऑब्जेक्ट को कैसे अपडेट करें?

{ 
    "name": "myProduct", 
    "perspectives" : [ 
     { 
      "name": "p1", 
      "views" : [ 
       { 
        "name": "v1" 
       }, 
       { 
        "name": "v2" 
       } 
      ] 
     }, 
     { 
      "name": "p2", 
      "views" : [ 
       { 
        "name": "v1" 
       }, 
       { 
        "name": "v2" 
       } 
      ] 
     } 
    ] 
} 

मैं विचारों से प्रत्येक के लिए एक "उर्फ" क्षेत्र को जोड़ने के लिए दस्तावेज़ संरचना को अद्यतन करने के बारे में कैसे जाना होगा?

मूल रूप से मैं परिप्रेक्ष्य की तरह कुछ करना चाहता हूं .views.alias: "av1" सभी दृष्टिकोणों के लिए .views.name: "v1"।

जिसके परिणामस्वरूप संरचना इस प्रकार दिखाई देगा:

{ 
    "name": "myProduct", 
    "perspectives" : [ 
     { 
      "name": "p1", 
      "views" : [ 
       { 
        "name": "v1", 
        "alias": "av1" 
       }, 
       { 
        "name": "v2", 
        "alias": "av2" 
       } 
      ] 
     }, 
     { 
      "name": "p2", 
      "views" : [ 
       { 
        "name": "v1", 
        "alias": "av1" 
       }, 
       { 
        "name": "v2", 
        "alias": "av2" 
       } 
      ] 
     } 
    ] 
} 

स्पष्ट करने के लिए, मैं इस तरह कुछ करने के लिए करना चाहते हैं:

foreach (view in product.perspectives.views) 
{ 
    if (view.name == "p1") 
     view.add("alias", "av1"); 
} 
+0

क्या आप जिस भी भाषा का उपयोग कर रहे हैं, उसके साथ डेटा खींच नहीं सकते हैं, इसके माध्यम से लूप करें जैसे आप नीचे हैं, और इसे अपडेट करें? या आप इसे एक ही प्रश्न में करने की कोशिश कर रहे हैं। यदि ऐसा है, तो इसे देखें: http://www.mongodb.org/display/DOCS/Server-side+Code+Execution –

+0

धन्यवाद शेन! हाँ, मैं कंसोल से ऐप और उच्च स्तरीय भाषा (जैसे जावा, उदाहरण के लिए) की बजाय स्क्रिप्ट के रूप में कर रहा हूं। मैं ऐप रूट जा सकता हूं हालांकि यह आसान/अधिक उत्पादक होने पर समाप्त होता है। – longda

उत्तर

15

आप आपके दस्तावेज़ों पाश करना होगा, प्रत्येक दस्तावेज़ में दृष्टिकोण और प्रत्येक परिप्रेक्ष्य में विचार। फिर विचारों को अद्यतन करें और अद्यतन दस्तावेज़ को सहेजें। इस तरह की कुछ चाल चलनी चाहिए:

db.products.find().forEach(function (product) { 
    product.perspectives.forEach(function (perspective) { 
    perspective.views.forEach(function (view) { 
     view.alias = "a" + view.name; 
    }) 
    }); 

    db.products.save(product); 
}) 

आप इस समारोह को मोंगो खोल में पेस्ट कर सकते हैं और इसे वहां से चला सकते हैं। एक विकल्प के रूप में, आप यह updateProducts.js नामक एक फाइल में सहेज सकते हैं और मोंगो खोल के साथ फ़ाइल को चलाने:

mongo nameOfDatabase updateProducts.js 

समारोह सर्वर पर निष्पादित किया जाएगा, तो यह काफी तेजी से किया जाना चाहिए।

+0

अच्छा, मैं इसे आज़मा दूंगा ... धन्यवाद! – longda

+0

यह काम करता है! तुम भगवान हो :) – longda

+0

@ लोंगडा: खुशी है कि मैं मदद कर सकता हूं :) –

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