कोई $move
नहीं है MongoDB में
. कहा जा रहा है, सबसे आसान समाधान दो चरणों वाला दृष्टिकोण है:
यहां महत्वपूर्ण हिस्सा, यह सुनिश्चित करने के लिए कि सब कुछ बेकार है, अद्यतन के लिए क्वेरी में मूल सरणी दस्तावेज़ शामिल करना है।
निम्नलिखित प्रपत्र का एक दस्तावेज़ दिया गया है:
{
_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
}
]
}