2016-02-25 10 views
8

こんにちは、私はノードのJSとMongoBDを使用していますが、私は、既存のドキュメントを更新し、更新されたドキュメントを返すようにしたい、ドキュメントが正しく更新されnpm install mongodbfindOneAndUpdate:真を返すオリジナル文書のMongoDB

を使用しました。古いドキュメントを返すのは、更新前の元のドキュメントを意味します。私はreturnNewDocument:trueパラメータを使用していますが、使用はしていません。私が直接端子を介してのMongoDBに移動して、ドキュメントが正しく更新され

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

しようとすると、

  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); 
       } 
      }); 

応答はそれだけで元の代わりに、1を更新返し、

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

です。

Node.jsのdriver documentationがためのオプションである(findOneAndUpdate()ためreturnNewDocumentオプションは言及していない

"mongodb": "^2.1.4", 
+0

使用しているのMongoDBのバージョンは何? 3.2? – Saleem

答えて

30

任意のヘルプがpackage.jsonに

を高く評価され、2時間のためにここ立ち往生同じ名前のMongoDB shell command)。

代わりにreturnOriginalというオプションがあります。デフォルトはtrueです。このオプションを使用して、falseに設定して、更新された文書を元の文書ではなく返すようにしてください。

+7

あなたは正しいです。名前の不一致がmongodbにも詰まったことは残念です。うまくいけば、彼らはそれを修正するでしょう。 – Saleem

+0

素晴らしい、その問題を解決しました。ありがとう:) :) –

+1

ここでこの問題は1時間失われました。ありがとう。 – Sulliwane

1

node js mongoDb driverは、mongo shellコマンドと区別されています。あなたは "MongoDBの" 使用している場合はfalse

代わり

returnNewDocument:真

"^ 2.1.4" を、その後

returnOriginalを使用しています。

はのは、コードの下に見てみましょう:

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 
        }  */  
     } 
    }); 
関連する問題