一尘不染

与returnNewDocument:true一起使用的findOneAndUpdate返回原始文档MongoDB

node.js

我正在将MongoDB与节点js一起使用 npm install 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",

阅读 485

收藏
2020-07-07

共1个答案

一尘不染

Node.js 驱动程序文档中没有提及returnNewDocument选项findOneAndUpdate()(这是具有相同名称的MongoDB
Shell命令
的选项)。

相反,它提到了一个名为的选项returnOriginal,默认为true。尝试使用该选项,将其设置false为返回 更新的
文档而不是原始文档。

2020-07-07