2012-06-29 3 views
5

यहां एक उदाहरण है जो मैं करने की कोशिश कर रहा हूं, क्योंकि मैं समझ नहीं पा रहा हूं कि मेरा क्या मतलब है।मैं MongoDB में किसी शब्दकोश में एक और मूल्य कैसे जोड़ूं?

मैं इसे मोंगो सीएलआई में निष्पादित करता हूं: db.posts.insert({name: "Hello, world!, body: "Here's my first blog post. Happy reading!", comments: []})। मैं क्या करना चाहता हूं comments शब्दकोश में टिप्पणी जोड़ने के लिए उस प्रविष्टि को अपडेट करें।

db.posts.update() का उपयोग करके मैं इसे कैसे प्राप्त करूं?

+0

मैंने इसे "वास्तविक प्रश्न" बनाने के लिए प्रश्न संपादित किया है।यदि यह अभी भी आपके मानकों को पूरा नहीं करता है, तो कृपया मुझे बताएं कि समस्या क्या है। –

+0

किसी सरणी में कोई तत्व जोड़ने के लिए, मुझे लगता है कि आप जो चाहते हैं वह $ push या $ addToSet है: http://www.mongodb.org/display/DOCS/Updating – matulef

उत्तर

-2

की तरह एक वस्तु के लिए:

{ 
    name: "Hello, world!", 
    content: "This is my first post" 
} 

अगर आप अब चलाने

db.posts.update({name: "Hello, world!"}, {name: "First post"}); 

यह है कि क्या परिणाम होगा:

{ 
    title: "First post" 
} 

सामग्री विशेषता के रूप में निकाल दिया जाएगा वहाँ प्रदान किए गए कोई प्रतिस्थापन मूल्य नहीं है। मैं इसका उल्लेख कर रहा हूं क्योंकि यह एक आम त्रुटि है।

db.posts.update({name: "Hello, world!" }, { $push: {comments: "First comment!"}}); 

$ धक्का प्रयोग किया जाता है अगर आप एक सरणी के लिए डेटा जोड़कर कर रहे हैं:

तो आप के लिए एक विशेषता "जोड़ें" चाहते हैं तो आपको चलाने की जरूरत है। यदि इसका सामान्य क्षेत्र $ सेट का उपयोग करता है।

संदर्भ: http://www.mongodb.org/display/DOCS/Updating

6

ओपी के सवाल और उदाहरण मेल नहीं खाते। वह वास्तव में दस्तावेज़ के भीतर एक सरणी में एक फ़ील्ड डालना चाहता है, जिसका अर्थ है कि

db.posts.update({name: "Hello, world!" }, { $push: {comments: "First comment!"}}); 

ठीक काम करता है।

हालांकि, यदि आप किसी शब्दकोश में कोई मान या उप-दस्तावेज़ जोड़ना चाहते हैं, तो आप $set कमांड का उपयोग करेंगे। हमारे उदाहरण के रूप में इस दस्तावेज़ लें:

{ 
    "_id": { 
     "$oid": "538420b2862a656e9e99fc93" 
    }, 
    "name": "Farmer John", 
    "items": { 
     "peaches": 5, 
     "bananas": 10 
    } 
} 

के आप आइटम के लिए "apples": 2 जोड़ना चाहते हैं करते हैं। कमांड यह होगी

db.collection.update({"name": "Farmer John"}, 
        {"$set": {"items.apples": 2}}); 

आपका दस्तावेज़ तो ऐसा दिखाई देगा:

{ 
    "_id": { 
     "$oid": "538420b2862a656e9e99fc93" 
    }, 
    "name": "Farmer John", 
    "items": { 
     "peaches": 5, 
     "bananas": 10, 
     "apples: 2 
    } 
} 

ध्यान दें कि यह रूप में अच्छी तरह subdocument डालने के साथ काम करता है, तो हम मूल उदाहरण में बदलाव कर सकते हैं:

{ 
    "_id": { 
     "$oid": "538420b2862a656e9e99fc93" 
    }, 
    "name": "Farmer John", 
    "items": { 
     "peaches": { 
      "yellow": 5, 
      "white": 3 
     } 
    } 
} 

और चलो 4 दादी स्मिथ सेब और 8 फ़ूजी सेब डालें।

db.collection.update({"name": "Farmer John"}, 
        {"$set": {"items.apples": {"fuji": 8, "granny smith": 4}}}); 

हमारे दस्तावेज़ अब होगा:

{ 
    "_id": { 
     "$oid": "538420b2862a656e9e99fc93" 
    }, 
    "name": "Farmer John", 
    "items": { 
     "peaches": { 
      "yellow": 5, 
      "white": 3 
     }, 
     "apples": { 
      "fuji": 8, 
      "granny smith": 4 
     } 
    } 
} 

एक आखिरी टिप्पणी: ध्यान दें कि यदि subdocument या क्षेत्र पहले से मौजूद है, तो यह $set आदेश द्वारा ओवरराइड कर दिया जाएगा।

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