यदि आप MongoDB 3.0 या नए पर हैं, तो आपको .findOneAndUpdate()
का उपयोग करना होगा और projection
. का उपयोग करें वापस जाने के लिए फ़ील्ड के सबसेट को निर्दिष्ट करने का विकल्प। आपको returnNewDocument
. भी सेट करना होगा करने के लिए true
. बेशक आपको $elemMatch
. का उपयोग करने की आवश्यकता है यहां प्रोजेक्शन ऑपरेटर है क्योंकि आप पोजिशनल प्रोजेक्शन का उपयोग नहीं कर सकते हैं और नया दस्तावेज़ वापस कर सकते हैं।
जैसा कि किसी ने बताया:
<ब्लॉकक्वॉट>
आपको .findOneAndUpdate()
. का उपयोग करना चाहिए क्योंकि .findAndModify()
प्रत्येक आधिकारिक भाषा चालक में पदावनत के रूप में हाइलाइट किया गया है। दूसरी बात यह है कि सिंटैक्स और विकल्प ड्राइवरों में .findOneAndUpdate()
के लिए काफी सुसंगत हैं। . .findAndModify()
. के साथ , अधिकांश ड्राइवर "क्वेरी/अपडेट/फ़ील्ड" कुंजियों के साथ एक ही ऑब्जेक्ट का उपयोग नहीं करते हैं। इसलिए यह थोड़ा कम भ्रमित करने वाला होता है जब कोई व्यक्ति किसी अन्य भाषा में सुसंगत होने के लिए आवेदन करता है। .findOneAndUpdate()
. के लिए मानकीकृत API परिवर्तन वास्तव में 3.2.x के बजाय सर्वर रिलीज 3.x के अनुरूप है। पूर्ण अंतर यह है कि शेल विधियाँ वास्तव में विधि को लागू करने में अन्य ड्राइवरों (एक बार के लिए!) इसलिए अधिकांश ड्राइवरों के पास वास्तव में इस तरह के परिवर्तनों के साथ 3.x रिलीज़ के अनुरूप एक प्रमुख रिलीज़ बम्प था।
db.collection.findOneAndUpdate(
{
"_id": ObjectId("56d6a7292c06e85687f44541"),
"rankings._id" : ObjectId("46d6a7292c06e85687f55543")
},
{ $inc : { "rankings.$.score" : 1 } },
{
"projection": {
"rankings": {
"$elemMatch": { "_id" : ObjectId("46d6a7292c06e85687f55543") }
}
},
"returnNewDocument": true
}
)
MongoDB 3.0 से आगे, आपको findAndModify
. का उपयोग करने की आवश्यकता है और fields
विकल्प भी आपको सेट करने होंगे new
करने के लिए true
दूसरे में नया मान वापस करने के लिए।
db.collection.findAndModify({
query: {
"_id": ObjectId("56d6a7292c06e85687f44541"),
"rankings._id" : ObjectId("46d6a7292c06e85687f55543")
},
update: { $inc : { "rankings.$.score" : 1 } },
new: true,
fields: {
"rankings": {
"$elemMatch": { "_id" : ObjectId("46d6a7292c06e85687f55543") }
}
}
})
दोनों प्रश्न उत्पन्न होते हैं:
{
"_id" : ObjectId("56d6a7292c06e85687f44541"),
"rankings" : [
{
"_id" : ObjectId("46d6a7292c06e85687f55543"),
"name" : "Ranking 2",
"score" : 11
}
]
}