MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

MongoDB का उपयोग करके एक सरणी अपडेट करें

सेव () विधि विफल हो रही है क्योंकि यह निम्नलिखित दस्तावेज़ को संग्रह में सम्मिलित करने का प्रयास कर रही है:{"$पुश":{"संसाधन":[संसाधनों की एक सूची]}}, और "$पुश" एक मान्य कुंजी नहीं है नाम।

आपके प्रश्न से, ऐसा प्रतीत होता है जैसे आप एम्बेडेड दस्तावेज़ों की सूची में एक और संसाधन दस्तावेज़ जोड़ने का प्रयास कर रहे हैं, "संसाधन", एम्बेडेड दस्तावेज़ के अंदर {"itemID":"1"}, "itemList" के अंदर। क्या यह सही है?

एम्बेडेड दस्तावेज़ों की परतों से निपटना मुश्किल है, लेकिन यह किया जा सकता है:
यहां बताया गया है कि निम्नलिखित दस्तावेज़ को JS शेल का उपयोग करके "संसाधन" सूची में कैसे डाला जा सकता है:

> var docToInsert = { "resourceID" : "3", "resourceName" : "Foo Test3"}
> db.myCollection.update({_id:"1", "itemList.itemID":"1"}, {"$push":{"itemList.$.resources":docToInsert}})
> db.myCollection.find().pretty()
{
    "_class" : "com.model.Test",
    "_id" : "1",
    "itemList" : [
        {
            "itemID" : "1",
            "itemName" : "Foo",
            "resources" : [
                {
                    "resourceID" : "1",
                    "resourceName" : "Foo Test1"
                },
                {
                    "resourceID" : "2",
                    "resourceName" : "Foo Test2"
                },
                {
                    "resourceID" : "3",
                    "resourceName" : "Foo Test3"
                }
            ]
        }
    ]
}
> 

एम्बेडेड दस्तावेज़ों को अद्यतन करने के लिए "$" स्थितीय ऑपरेटर का उपयोग करने पर दस्तावेज़ीकरण "अपडेटिंग" दस्तावेज़ में पाया जा सकता है:http://www.mongodb.org/display/DOCS/Updating#Updating-The%24positionaloperator

"$push" संशोधक पर प्रलेखन "अपडेटिंग" पेज पर भी है:http://www.mongodb.org/display/DOCS/Updating#Updating-%24push

पोस्ट किए गए कोड से, ऐसा प्रतीत होता है जैसे "संसाधन" एक सूची है। यह संभव है कि आपको जिस विधि का उपयोग करने की आवश्यकता है वह $pushAll है, जिसका उपयोग सूची में एकाधिक मान जोड़ने के लिए किया जाता है:http://www.mongodb.org/display/DOCS/Updating#Updating-%24pushAll

जावा ड्राइवर का उपयोग करके, उपरोक्त इंसर्ट इस प्रकार किया जा सकता है:

Mongo m = new Mongo("localhost", 27017);
DB db = m.getDB("test");
DBCollection myColl = db.getCollection("myCollection");

BasicDBObject docToInsert = new BasicDBObject("resourceID", "3");
docToInsert.put("resourceName", "Foo Test3");

BasicDBObject updateQuery = new BasicDBObject("_id", "1");
updateQuery.put("itemList.itemID", "1");

BasicDBObject updateCommand = new BasicDBObject("$push", new BasicDBObject("itemList.$.resources", docToInsert));

myColl.update(updateQuery, updateCommand);
System.out.println(myColl.findOne().toString());

उपरोक्त निम्नलिखित आउटपुट करता है:

{ "_class" : "com.model.Test" , "_id" : "1" , "itemList" : [ { "itemID" : "1" , "itemName" : "Foo" , "resources" : [ { "resourceID" : "1" , "resourceName" : "Foo Test1"} , { "resourceID" : "2" , "resourceName" : "Foo Test2"} , { "resourceID" : "3" , "resourceName" : "Foo Test3"}]}]}

उम्मीद है, उपरोक्त आपकी समझ में सुधार करेगा कि जावा ड्राइवर का उपयोग करके मोंगो के साथ एक एम्बेडेड दस्तावेज़ को कैसे अपडेट किया जाता है। मैंने देखा है कि यह प्रश्न स्प्रिंग से भी संबंधित है ("मोंगोऑपरेशंस" स्प्रिंग पैकेज से एक वर्ग है), जिसे मैं दुर्भाग्य से परिचित नहीं हूं। यदि आपको अभी भी अपने अपडेट में समस्या आ रही है, तो शायद समुदाय का कोई अन्य सदस्य जो स्प्रिंग से अधिक परिचित है, सहायता करने में सक्षम होगा।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. कई क्षेत्रों पर Node.js और नेवला रेगेक्स क्वेरी

  2. पाइमोंगो में फास्ट या बल्क अप्सर्ट

  3. $graphLookup के लिए स्ट्रिंग से ऑब्जेक्ट आईडी का मिलान करना

  4. मैं MongoDB में प्राकृतिक क्रम कैसे निर्दिष्ट कर सकता हूं?

  5. क्या है Mongoose त्रुटि ObjectId पर कास्ट करें मान XXX के लिए पथ _id पर विफल रहा?