2016-02-25 5 views
8

हाय मैं नोड js साथ MongoBD उपयोग कर रहा हूँ देता है, मैं npm install mongodbfindOneAndUpdate: सच मूल दस्तावेज़ MongoDB

मैं किसी मौजूदा दस्तावेज़ अपडेट करें और अपडेट दस्तावेज़ वापस करना चाहते इस्तेमाल किया, दस्तावेज़ सही ढंग से अद्यतन किया जाता है। लेकिन यह पुराने दस्तावेज का मतलब है कि अद्यतन से पहले मूल दस्तावेज़ का मतलब है। मैंने returnNewDocument:true पैरामीटर का उपयोग किया है लेकिन कोई उपयोग नहीं है।

  var filter = { 
       '_id': object_id 
      }, 
      update = { 
       $set: { "status" : data["status"] }, 
       $push: { 
        "statusHistory": { 
         $each: [{ status:data["status"],statusChangedTime:data["statusChangedTime"],comment:data["comment"]}], 
         $position:0, 
        } 
       }, 
      } 
      ,options = { 
       //upsert: false, 
       //multi: false, 
       returnNewDocument: true 
      }; 

      col.findOneAndUpdate(filter, update, options,function(err, res) { 
       if (err) { 

        console.log(err); 
       }else { 

        console.log(res); 
       } 
      }); 

प्रतिक्रिया

{ lastErrorObject: { updatedExisting: true, n: 1 }, 
    value: 
    { 
//original document 
    },  
    ok: 1 } 

जब मैं सीधे टर्मिनल के माध्यम से MongoDB के पास जाकर

db.MyCollection.find().pretty(); 

दस्तावेज़ सही ढंग से अद्यतन किया जाता है की कोशिश यह सिर्फ मूल के बजाय एक अद्यतन देता है।

2 घंटे के लिए यहाँ अटक, किसी भी मदद package.json में

सराहना की

"mongodb": "^2.1.4", 
+0

MongoDB किस संस्करण का उपयोग कर रहे हैं? 3.2? – Saleem

उत्तर

30

Node.js driver documentationfindOneAndUpdate() के लिए एक returnNewDocument विकल्प (जिसके लिए एक विकल्प है का उल्लेख नहीं करता उसी नाम के साथ MongoDB shell command)।

इसके बजाय, यह returnOriginal नामक एक विकल्प का उल्लेख करता है, जो true पर डिफ़ॉल्ट है। उस विकल्प का उपयोग करने का प्रयास करें, इसे पर को मूल के बजाय दस्तावेज़ को वापस करने के लिए सेट करें।

+7

आप सही हैं। यह दुर्भाग्यपूर्ण है कि असंगतता नामकरण भी मोंगोडब में चिपक गया। उम्मीद है कि वे इसे ठीक करेंगे। – Saleem

+0

महान, जिसने समस्या हल की। बहुत बहुत धन्यवाद :):) –

+1

इस समस्या पर 1 घंटा खो दिया। बहुत धन्यवाद। – Sulliwane

1

node js mongoDb driver भेदभाव फ़ॉर्म mongo shell कमांड रहा है। आप "MongoDB" उपयोग कर रहे हैं: "^ 2.1.4" तो का उपयोग

returnOriginal: झूठी

बजाय

returnNewDocument: सच

के कोड के नीचे देखते हैं:

db.collection('user_setting').findOneAndUpdate({user_id: data.user_id}, {$set: data}, {projection: dbConfig.userSetting, returnOriginal: false}, function (err, res) { 
     if (err) { 
      callback({'error': 1, 'message': 'Internal server error! ' + err, 'data': null, 'status': 500}); 
     } else { 
       console.log(res); 
       /* { lastErrorObject: { updatedExisting: true, n: 1 }, 
         value: 
          { user_id: 1, 
          notification_alert: 1, 
          notification_sound: 1, 
          user_setting_id: 2 
          }, 
         ok: 1 
        }  */  
     } 
    });