Mongoose返回模型无法更新

Jon*_*Red 5 mongoose mongodb node.js

我是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)
    });
});
Run Code Online (Sandbox Code Playgroud)

这会导致以下错误:将更新应用于文档{_id:ObjectId('54647402cb955748153ea782'),...}后,发现(不可变)字段'_id'已更改为_id:ObjectId('546d9e0e539ed9ec102348f9 ")

为什么会这样?我原本以为从初始查找返回的模型上调用update会没问题.

请注意:在我的用例中,查找和更新之间发生了一些事情.具体来说,我正在做类似的事情:

model.property.push(objectId)
Run Code Online (Sandbox Code Playgroud)

然后我想通过更新提交.

我确信这是一个直截了当的问题,但我无法在文档的任何地方看到我可能会弄错它.

所有帮助赞赏.

更新:

我实际需要做的是:

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)
    });
});
Run Code Online (Sandbox Code Playgroud)

使用"保存"而不是"更新"

Bar*_*rno 5

不知道我是否理解了

查找和更新(例如使用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)
        });      
    });
Run Code Online (Sandbox Code Playgroud)

仅更新:(例如使用express)

User.update({email:email}, req.body, {}, function(err,user){
    if(err){
        throw err;
    }
    res.send(200, {
        message : 'User updated ' + user
    });
});
Run Code Online (Sandbox Code Playgroud)

请记住:

模型是模式的编译版本。

我希望这可以帮助你