Mongoose 返回的模型无法更新
Posted
技术标签:
【中文标题】Mongoose 返回的模型无法更新【英文标题】:Mongoose Returned Model can't be updated 【发布时间】:2015-01-19 07:10:21 【问题描述】:我对 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”已更改为_id: ObjectId('546d9e0e539ed9ec102348f9')
为什么会这样?我原以为对从初始查找返回的模型调用更新会很好。
请注意:在我的用例中,在查找和更新之间会发生一些事情。具体来说,我正在做类似的事情:
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)
);
);
使用“保存”而不是“更新”
【问题讨论】:
_id 是不可变的,你不能更新 _id。您也尝试更新 _id 我如何尝试更新_id?在基本的失败示例中,我没有改变我能看到的东西......在下一个注释中,我再次向模型上的数组添加值,而不是 _id。 【参考方案1】:我不知道我是否理解
查找和更新(例如使用 express)
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)
);
);
仅更新:(例如使用 express )
User.update(email:email, req.body, , function(err,user)
if(err)
throw err;
res.send(200,
message : 'User updated ' + user
);
);
记住:
模型是架构的编译版本。
希望对你有帮助
【讨论】:
谢谢你,这对我来说几乎是有意义的。当我进行查找时,我没有得到一个或多个文档的对象实例吗?我想使用实体这个词,但这可能是我的 php ORM 术语逐渐出现的原因。虽然我可以直接在这个模型上使用方法,例如更新,但我会拥有? 如果你做console.dir(typeof user); console.dir(typeof User);
你可以看到那个用户-> 对象(但它不是像 php 中的$foo = new Foo
这样的对象)而不是用户是具有方法的函数(如更新、查找等)。如果我的回答对你有帮助,可以打勾吗?以上是关于Mongoose 返回的模型无法更新的主要内容,如果未能解决你的问题,请参考以下文章