Mongoose: findOneAndUpdate は更新されたドキュメントを返しません 質問する

Mongoose: findOneAndUpdate は更新されたドキュメントを返しません 質問する

以下は私のコードです

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');

var Cat = mongoose.model('Cat', {
    name: String,
    age: {type: Number, default: 20},
    create: {type: Date, default: Date.now} 
});

Cat.findOneAndUpdate({age: 17}, {$set:{name:"Naomi"}},function(err, doc){
    if(err){
        console.log("Something wrong when updating data!");
    }

    console.log(doc);
});

mongo データベースにはすでにレコードがいくつかあるので、このコードを実行して、年齢が 17 である名前を更新し、コードの最後に結果を出力したいと思います。

しかし、なぜコンソールからは同じ結果(変更された名前ではない)が返されるのに、mongo db コマンドラインに移動して「db.cats.find();」と入力すると、変更された名前で結果が返されるのでしょうか。

その後、このコードを再度実行すると、結果が変更されます。

私の質問は、データが変更された場合、console.log に最初に記録したときに元のデータがまだ取得されるのはなぜかということです。

ベストアンサー1

なぜこのようなことが起こるのでしょうか?

デフォルトでは、変更されていない元のドキュメントが返されます。新しい更新されたドキュメントが返されるようにするには、追加の引数として、newプロパティが に設定されたオブジェクトを渡す必要がありますtrue

からマングースドキュメント:

クエリ#findOneAndUpdate

Model.findOneAndUpdate(conditions, update, options, (error, doc) => {
  // error: any errors that occurred
  // doc: the document before updates are applied if `new: false`, or after updates if `new = true`
});

利用可能なオプション

  • new: bool - trueの場合、元のドキュメントではなく変更されたドキュメントを返します。デフォルトは false です(4.0 で変更)

解決

{new: true}変数に更新された結果が必要な場合はパスしますdoc:

//                                                         V--- THIS WAS ADDED
Cat.findOneAndUpdate({age: 17}, {$set:{name:"Naomi"}}, {new: true}, (err, doc) => {
    if (err) {
        console.log("Something wrong when updating data!");
    }

    console.log(doc);
});

おすすめ記事