当前位置: 首页 > 面试题库 >

mongoose:findOneAndUpdate不返回更新的文档

贺正祥
2023-03-14
问题内容

下面是我的代码

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时还是第一次获得原始数据。


问题答案:

为什么会这样?

默认情况下 是返回 原来的,不变 的文件。如果要返回新的,更新的文档,则必须传递一个附加参数:new属性设置为的对象true

从mongoose文档中:

Query#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);
});


 类似资料:
  • 我想知道是否有任何方法可以更改由猫鼬,和方法返回的文档对象的可用字段的值,并通过应用到数据库中的更改来更新它们。下面的代码片段是我期望完成我想要的工作:

  • 问题内容: 我想获取更新的文档。这是我的原始代码,它成功更新但没有返回文档。 我使用了toArray函数,但是这给出了错误“没有提供的回调就不能使用writeConcern”: 有任何想法吗? 问题答案: 只会向自己的回调报告受影响的文档数。 要在修改时检索文档,可以改用(以前称为)。 更新:在mongoDB中执行时,请使用;如果使用mongoose,则可以使用。以上是Node.js驱动程序。 注

  • 问题内容: 我试图在扭曲的python中结合这两个查询: 和: 进入单个查询。有可能这样做吗? 我尝试将SELECT放在子查询中,但我不认为整个查询都会返回我想要的内容。 有没有办法做到这一点?(甚至更好,没有子查询)还是只需要坚持两个查询? 谢谢, 泉 问题答案: 您不能直接合并这些查询。但是您可以编写一个存储过程来执行两个查询。例:

  • 我正在创建一个递归导航迷宫的程序。代码: 然而,每当我到达死胡同时,它都不会回溯。当我调试时,它表明当程序从递归或“回溯”返回时,我的起始值专注于停留在我的死胡同空间。 例如: 9是我的出发点。2是我的退出。4是我的道路。1 表示墙壁。当我到达一个死胡同时(在本例中为第 7 行,第 2 列)。我的立场是等于整个程序其余部分的死胡同空间。这是为什么呢?

  • 目标是打印标签的当前文本。标签在整个程序中不断变化,使用当前的方法,我只能检索标签的初始化值。 我用来检索控制器实例的内容:

  • 我使用改型来连接数据库,但GSON似乎没有解析数据。正在返回JSON,但没有创建响应体,因此我无法与数据交互。有什么想法吗? 我的URL添加 okhttp日志