下面是我的代码

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();"时.结果是修改了名字.

然后我再次运行这段代码,结果被修改了.

我的问题是:如果数据被修改了,那么为什么我第一次使用控制台时仍然得到原始数据.记录下来.

推荐答案

为什么会这样?

default将返回original, unaltered文档.如果希望返回新的、更新的文档,则必须传递一个附加参数:一个new属性设置为true的对象.

mongoose docs人中:

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`
});

Available options

  • new:bool-如果是true,则返回modified文档,而不是原始文档.defaults to false(在4.0中更改)

解决方案

如果希望doc变量中的更新结果,请通过{new: true}:

//                                                         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);
});

Node.js相关问答推荐

NX无法使用缓存运行根级脚本

在我的Next.js应用程序中没有正确设置Process.env.NODE_ENV

关于Node.js中的AES加密库的问题

后端如何保护数据不被用户提取其他用户的数据?

为什么这个verifyToken函数从未被调用过?

使用AWS SDK for JavaScript V3将图像从node.js上传到s3 bucket

我正在try 在公共目录中使用 Express.js 项目部署 Angular 静态构建

找不到react 模块:错误:默认条件应该是最后一个

在将用作 nodejs/expressjs 中的中间件的函数中使用 keycloak.protect()

Mongoose-更新嵌套数组

根据 mongoDB 中存在的唯一字符串生成唯一字符串的最佳方法

使用新react 18.0.0 的 create-react-app my-app redux 错误

无法更新MongoDB中的文档:";伯森场';writeConcern.w';是错误的类型';数组'&引用;

node.js 中 pdfkit-tables 中的垂直线

如何正确使用 package.json 中的关键字属性?

对不同对象中的函数使用相同的键时,V8 中的函数调用缓慢

我可以在 Heroku 中运行咖啡脚本吗?

代理(如提琴手)可以与 Node.js 的 ClientRequest 一起使用吗

Node.js -Firebase 服务帐户私钥不会解析

找不到在 docker compose 环境中运行的 node js 应用程序的模块