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

अद्यतन-अपर्ट निर्धारित करने के लिए नेवला सम्मिलित या अद्यतन कर रहा है

.update() नेवला में विधि कॉलबैक के लिए तीन तर्क लेती है, err , numAffected , और एक raw जवाब। क्या हुआ यह देखने के लिए "कच्ची" वस्तु का प्रयोग करें:

Member.update({user_id : 1}, 
    {$set : {name:"name1"}}, 
    {upsert : true }, 
    function (err, numAffected, raw) {
    if (!err) {
        console.log(raw)
    }
});

आपको इस तरह की संरचना दिखाई देगी:

{ ok: true,
  n: 1,
  updatedExisting: false,
  upserted: [ { index: 0, _id: 5456fc7738209001a6b5e1be } ] }

तो हमेशा n . होता है और 'updatedExistingkeys available, where the second is false on upserts and true otherwise. upsertedwill contain the _id` बनाए गए किसी भी नए दस्तावेज़ का मान।

जहां तक ​​n का सवाल है या "numAffected", यह मूल रूप से हमेशा 1 होता है जहां विरासत लेखन चिंता प्रतिक्रियाओं के तहत एक दस्तावेज़ का मिलान किया गया था।

आप बल्क ऑपरेशंस फॉर्म का उपयोग करके MongoDB 2.6 और इसके बाद के संस्करण में नई WriteResult प्रतिक्रिया देख सकते हैं:

var bulk = Member.collection.initializeOrderedBulkOp();
bulk.find({user_id : 1}.upsert().update({$set : {name:"name1"}});
bulk.execute(err,result) {
   console.log( JSON.stringify( result, undefined, 2 ) );
}

जो पहले पुनरावृत्ति पर आपको कुछ इस तरह मिलता है:

{
  "ok": 1,
  "writeErrors": [],
  "writeConcernErrors": [],
  "nInserted": 0,
  "nUpserted": 1,
  "nMatched": 0,
  "nModified": 0,
  "nRemoved": 0,
  "upserted": [
    {
      "index": 0,
      "_id": "5456fff138209001a6b5e1c0"
    }
  ]
}

और इसी तरह के मापदंडों के साथ एक सेकंड:

{
  "ok": 1,
  "writeErrors": [],
  "writeConcernErrors": [],
  "nInserted": 0,
  "nUpserted": 0,
  "nMatched": 1,
  "nModified": 0,
  "nRemoved": 0,
  "upserted": []
}

और दस्तावेज़ को केवल "संशोधित" के रूप में चिह्नित किया जाएगा जहां वास्तव में कुछ बदला गया था।

तो किसी भी दर पर, .update() ऑपरेशन संशोधित दस्तावेज़ या मूल दस्तावेज़ वापस नहीं करते हैं। वह है .findOneAndUpdate() विधि, मूल .findAndModify() . के चारों ओर एक नेवला आवरण जो एक परमाणु संचालन करता है। .update() विधियां आम तौर पर थोक संचालन के लिए होती हैं और इस तरह दस्तावेज़ सामग्री वापस नहीं करती हैं।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मोंगोडब कनेक्शन से निपटने का सही तरीका क्या है?

  2. मोंगोडीबी $ln

  3. स्थान वस्तु अपेक्षित, स्थान सरणी सही प्रारूप में नहीं है

  4. IPad पर उल्का ऐप का उपयोग करना जिसे उल्का-अप के साथ दूरस्थ सर्वर पर तैनात किया गया था (मोंगोडब से कनेक्ट करने में समस्या)

  5. mongoDB में अनुक्रमण सरणी/सबऑब्जेक्ट डुप्लिकेट कुंजी त्रुटि का कारण बनता है