我是Mongoose / Mongo和node.js的新手,所以我怀疑这只是我身边的一个误解,但是......
下面的代码示例是最小的失败示例,而不是我的用例。
var User = app.db.model('User');
User.find({email: 'm8@test.com'}, function (err, models) {
models[0].update(function(err, mod) {
console.log(err.message)
});
});
这会导致以下错误:将更新应用于文档{_id:ObjectId(' 54647402cb955748153ea782'),...}后,(不可变)字段' _id& #39;被发现被改为_id:ObjectId(' 546d9e0e539ed9ec102348f9')
为什么会这样?我原本以为从初始查找返回的模型上调用update会没问题。
请注意:在我的用例中,查找和更新之间发生了一些事情。具体来说,我做了类似的事情:
model.property.push(objectId)
然后我想通过更新提交。
我确定这是一个直截了当的问题,但我无法在文档的任何地方看到我可能会弄错。
所有帮助表示赞赏。
我真正需要做的是:
var User = app.db.model('User');
User.find({email: 'm8@test.com'}, function (err, models) {
models[0].save(function(err, mod) {
console.log(err.message)
});
});
使用'保存'而不是更新'
答案 0 :(得分:4)
我不知道我是否理解
查找和更新(例如使用快递)
var email = req.params.email;
User.find({email:email}, req.body, function(err,user){
if(err){
throw err;
}
//you do stuff like this
var obj = {
password:'new pass',
username:'username'
}
//use save if you want validate
User.update(user[0],obj,function(err, mod) {
console.log(err)
});
});
仅更新:(例如使用快递)
User.update({email:email}, req.body, {}, function(err,user){
if(err){
throw err;
}
res.send(200, {
message : 'User updated ' + user
});
});
请记住:
模型是模式的编译版本。
我希望这可以帮到你