下面是我的代码
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的name,然后在代码末尾打印结果。
然而,为什么我仍然从控制台得到相同的结果(而不是修改后的名称),但是当我进入mongo db命令行并输入"db.cats.find();
“时。结果是修改了名称。
然后我再次运行这段代码,结果被修改了。
我的问题是:如果数据被修改了,那么为什么我在第一次console.log它的时候仍然得到了原始数据。
发布于 2017-04-18 21:52:27
对于任何使用Node.js驱动程序而不是Mongoose的人,您将希望使用{returnOriginal:false}
而不是{new:true}
。
发布于 2017-12-21 14:06:08
因此,"findOneAndUpdate“需要一个返回原始文档的选项。并且,选项是:
MongoDB外壳
{returnNewDocument: true}
参考:https://docs.mongodb.com/manual/reference/method/db.collection.findOneAndUpdate/
猫头鹰
{new: true}
参考:http://mongoosejs.com/docs/api.html#query_Query-findOneAndUpdate
Node.js MongoDB驱动程序接口:
{returnOriginal: false}
参考:http://mongodb.github.io/node-mongodb-native/3.0/api/Collection.html#findOneAndUpdate
发布于 2015-09-28 02:47:46
默认情况下,findOneAndUpdate返回原始文档。如果希望它返回修改后的文档,请将options对象{ new: true }
传递给函数:
Cat.findOneAndUpdate({ age: 17 }, { $set: { name: "Naomi" } }, { new: true }, function(err, doc) {
});
https://stackoverflow.com/questions/32811510
复制相似问题