一尘不染

mongoose:findOneAndUpdate不返回更新的文档

node.js

下面是我的代码

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


阅读 535

收藏
2020-07-07

共1个答案

一尘不染

为什么会这样?

默认情况下 是返回 原来的,不变 的文件。如果要返回新的,更新的文档,则必须传递一个附加参数: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);
});
2020-07-07