findOneAndUpdate不返回原始文档

时间:2018-09-01 09:31:01

标签: node.js mongodb

环境

node -v
v10.0.0
// native driver "mongodb": "^3.0.8",

期望的行为

我要更新文档并返回原始文档。

实际行为

将返回更新的文档,而不是原始文档。

我尝试过的事情

最初,我在看findAndModify

http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#findAndModify

但是那里的文档说它已被弃用,并改为use findOneAndUpdate, findOneAndReplace or findOneAndDelete instead

所以我尝试了:

collection.findOneAndUpdate(filter, update, function(err, result) {
    if (err) {
        res.send(err);
    } else {

        // find object in array of objects ('statements') and return the 'text' property value
        var old_text = result.value.statements.find(x => x.id === "my_great_id").text;

        console.log(old_text);

    }
});

http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#findOneAndUpdate

文档说选项returnOriginal是默认选项,但是它记录的是更新后的值,而不是原始值。

编辑:

问题出在代码的其他地方-上面的代码按预期工作。

2 个答案:

答案 0 :(得分:1)

默认情况下,findOneAndUpdate函数返回原始文档。 但是,在您的情况下,将{new: false}添加到findOneAndUpdate函数的第三个参数中即可。

collection.findOneAndUpdate(filter, update, {new: false}, function(err, result) {
  if (err) {
    res.send(err);
  } else {

    // find object in array of objects ('statements') and return the 'text' property value
    var old_text = result.value.statements.find(x => x.id === "my_great_id").text;

    console.log(old_text);

}});

答案 1 :(得分:0)

问题出在代码的其他地方-原始帖子中的代码按预期工作。