Mongoose:findOneAndUpdate 不返回更新的文档
问题:Mongoose:findOneAndUpdate 不返回更新的文档 下面是我的代码 var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/test'); var Cat = mongoose.model('Cat', { name: String, age: {type: Number, defa
问题:Mongoose:findOneAndUpdate 不返回更新的文档
下面是我的代码
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);
});
我的 mongodb 数据库中已经有一些记录,我想运行此代码来更新年龄为 17 岁的名称,然后在代码末尾打印结果。
但是,为什么我仍然从控制台(不是修改后的名称)得到相同的结果,但是当我转到 mongo db 命令行并输入“db.cats.find();
”时。结果带有修改后的名称。
然后我回去再次运行这段代码,结果被修改了。
我的问题是:如果数据被修改了,那么为什么我在第一次使用console.log时仍然得到原始数据。
解答
为什么会这样?
默认是返回原始的、未更改的文档。如果您希望返回新的、更新的文档,您必须传递一个附加参数:一个将new
属性设置为true
的对象。
来自mongoose 文档:
查询#findOneAndUpdate
Model.findOneAndUpdate(条件,更新,选项,(错误,文档)u003d> {
// 错误:发生的任何错误
// doc: 如果
new: false
应用更新之前的文档,或者如果new = true
应用更新之后的文档
});
可用选项
*
new
: bool - 如果 true,返回 modified 文档而不是原始文档。 默认为 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);
});
更多推荐
所有评论(0)