当前位置: 首页 > 知识库问答 >
问题:

findOneAndUpdate不返回原始文档

巫马心水
2023-03-14

环境

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

然而,那里的文档表示它已被弃用,并使用findOneAndUpdate、findOneAndReplace或findOneAndDelete代替。

所以我尝试:

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/html" target="_blank">Collection.html#findOneAndUpdate

文档中说,默认选项是“返回原始值”(returnOriginal),但它记录的是更新后的值,而不是原始值。

编辑:

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

共有2个答案

陈兴朝
2023-03-14

问题出在代码的其他地方——正如预期的那样,原始post作品中的代码。

宦翔
2023-03-14

默认情况下,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);

}});
 类似资料:
  • 问题内容: 我正在将MongoDB与节点js一起使用 我想更新一个现有文档并返回更新后的文档,该文档已正确更新。但是它返回的旧文件意味着更新之前的原始文件。我已经使用了参数,但是没有用。 响应是 当我直接通过终端转到mongoDB并尝试 该文档已正确更新,它只返回原始文档而不是已更新的文档。 在这里停留了2个小时,我们将不胜感激 在package.json中 问题答案: Node.js 驱动程序文

  • 为了学习平均堆栈(使用Mongoose),我创建了一个StackOverflow类型的应用程序。我有存储在Mongo(v3.0.7)中的问题,它们有答案子文档。 我试图增加一个答案的投票数,但当问题返回时,它是空的。我非常肯定查询有问题,特别是我试图用需要修改的ID得到答案的地方。 查询0票有效: 更新:通过Mongo查询,返回结果: 但是,通过Mongoose返回NULL:

  • 问题内容: 在Node.js中使用Mongoose,您可以使用find返回一些字段。例如。 但我似乎无法弄清楚如何使用findOneAndUpdate返回某些字段。 有人做到过吗?我在文档中找不到它。 问题答案: 从说明书,该参数需要一个关键的它,因为还有其他的细节,比如和地方适用。您 还 需要以下选项: 您也可以使用 请注意,没有返回的文档处于处理更新修改 之前 的状态。有时候这就是您的意思,但

  • 问题内容: 我觉得有点愚蠢,但它不起作用: 我有如果给定的用户是unicode。如果字符串中包含或,我想打印成功,但是我总是得到的结果。 问题答案: 隐式锚定到字符串的开头。如果要在字符串中搜索可以在字符串中任何位置的子字符串,则需要使用: 输出: 另外,Python Regexes不需要在开头和结尾都有一个。 最后,我添加到该行的末尾,因为我认为这就是您想要的。否则,您会得到类似的信息,但并不太

  • 我在一个基于XML的spring上下文文件中定义了一个骆驼上下文。有一条路由正在由SOAP(XML)web服务客户端bean调用。在调用路由时,它抛出一些异常,客户端接收到骆驼异常,而不是原始异常。 Camel在异常时对客户端的响应如下所示 预期响应应该是任何异常的原始异常消息 这是我的骆驼路线定义 我尝试使用camel onException但没有成功:(

  • 注:[2017年1月11日]RestInfoAdapter.java的源代码已经更改和更新(参见下面的第2项) 我一直在尝试通过保留原始输入列表的备份/副本来使我的搜索视图返回到原始列表。但是,它根本不起作用。我的这个问题包括使用自定义类的RecyclerView和ArrayList。 是一个名为<code>RestInfo 我是如何尝试的 适配器类,以便RestInfo可以呈现在卡片视图中(因此