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

एक ही दस्तावेज़ के भीतर एक तत्व को एक सरणी से दूसरे में ले जाएँ MongoDB

कोई $move नहीं है MongoDB में . कहा जा रहा है, सबसे आसान समाधान दो चरणों वाला दृष्टिकोण है:

  1. दस्तावेज़ को क्वेरी करें
  2. अपडेट को $pull और $push /$addToSet

यहां महत्वपूर्ण हिस्सा, यह सुनिश्चित करने के लिए कि सब कुछ बेकार है, अद्यतन के लिए क्वेरी में मूल सरणी दस्तावेज़ शामिल करना है।

निम्नलिखित प्रपत्र का एक दस्तावेज़ दिया गया है:

{
    _id: "foo",
    arrayField: [
        {
            a: 1,
            b: 1
        },
        {
            a: 2,
            b: 1
        }
    ]
}

मान लें कि आप {a:1, b:1} को स्थानांतरित करना चाहते हैं किसी भिन्न फ़ील्ड में, जिसे someOtherArrayField . कहा जा सकता है , आप कुछ ऐसा करना चाहेंगे।

var doc = db.col.findOne({_id: "foo"});
var arrayDocToMove = doc.arrayField[0];
db.col.update({_id: "foo", arrayField: { $elemMatch: arrayDocToMove} }, { $pull: { arrayField: arrayDocToMove }, $addToSet: { someOtherArrayField: arrayDocToMove } })

जिस कारण से हम $elemMatch का उपयोग करते हैं यह सुनिश्चित करना है कि जिस फ़ील्ड को हम सरणी से निकालने जा रहे हैं, वह तब से नहीं बदली है जब से हमने पहली बार दस्तावेज़ को क्वेरी की थी। जब एक $pull के साथ जोड़ा जाता है यह भी सख्ती से जरूरी नहीं है, लेकिन मैं आमतौर पर इन परिस्थितियों में अत्यधिक सतर्क हूं। यदि आपके आवेदन में कोई समानता नहीं है, और आपके पास केवल एक आवेदन उदाहरण है, तो यह कड़ाई से आवश्यक नहीं है।

अब जब हम परिणामी दस्तावेज़ की जाँच करते हैं, तो हमें मिलता है:

db.col.findOne()
{
        "_id" : "foo",
        "arrayField" : [
                {
                        "a" : 2,
                        "b" : 1
                }
        ],
        "someOtherArrayField" : [
                {
                        "a" : 1,
                        "b" : 1
                }
        ]
}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. बड़ी मात्रा में मेट्रिक्स / एनालिटिक्स डेटा संग्रहीत करने के लिए MongoDB दृष्टिकोण

  2. मोंगो में उप-दस्तावेज़ व्यवस्थित करने का सबसे अच्छा तरीका?

  3. जब सूची फ़ील्ड में मान किसी सूची से मानदंड मान से मेल खाते हैं, तो MondoDB रिकॉर्ड खोजने के लिए C# में LINQ का उपयोग करें

  4. मोंगो पीएचपी ऐप त्रुटि:घातक त्रुटि:ध्यान में न आया अपवाद 'MongoException' संदेश के साथ ''।' कुंजी में अनुमति नहीं है

  5. मोंगोडब नेस्टेड दस्तावेजों को खोल देता है