1. ホーム
  2. node.js

[解決済み] Mongoose findByIdAndUpdateが正しいモデルを返さない

2022-08-13 04:51:39

質問

MongooseのfindByIdAndUpdateがコールバックで正しいモデルを返さないという、今まで見たことのない問題が発生しています。

以下はそのコードです。

    var id = args._id;
    var updateObj = {updatedDate: Date.now()};
    _.extend(updateObj, args);

    Model.findByIdAndUpdate(id, updateObj, function(err, model) {
        if (err) {
            logger.error(modelString +':edit' + modelString +' - ' + err.message);
            self.emit('item:failure', 'Failed to edit ' + modelString);
            return;
        }
        self.emit('item:success', model);
    });

dbにあるオリジナルドキュメントはこのようになっています。

{
    _id: 1234
    descriptors: Array[2],
    name: 'Test Name 1'
}

入るupdateObjはこんな感じです。

{
    _id: 1234
    descriptors: Array[2],
    name: 'Test Name 2'
}  

コールバックから返されるモデルは、updatedObjではなく、元のモデルと同じです。 dbに問い合わせると、正しく更新されています。 ただ、データベースから返されていないだけです。

これは、「愚かなユーザー」エラーのように感じますが、私はそれを見ることができません。 どんなアイデアでも大いに歓迎します。

どのように解決するのですか?

Mongoose 4.0 では、デフォルトの値として new オプションの findByIdAndUpdate (そして findOneAndUpdate ) に変更されました。 false に変更されました。これは、古い doc を返すことを意味します(#2262 の リリースノート ). そのため、明示的にオプションを true に設定する必要があります。

Model.findByIdAndUpdate(id, updateObj, {new: true}, function(err, model) {...