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

कैसे एक एम्बेडेड सरणी में एक अद्यतन के बाद नया मान वापस पाने के लिए?

यदि आप 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
                }
        ]
}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB से उसके मुख्य नाम से एक मान प्राप्त करें

  2. मैं सम्मिलन के समय उल्का संग्रह कैसे क्रमबद्ध कर सकता हूं?

  3. विंडोज़ में मोंगोडीबी से कैसे कनेक्ट करें?

  4. लूपबैक पर MongoDB एकत्रीकरण

  5. MongoDB में नेस्टेड इंडेक्स कैसे बनाएं?