Mongoose返回模型无法更新

时间:2014-11-21 07:32:38

标签: node.js mongodb mongoose

我是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)

然后我想通过更新提交。

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

所有帮助表示赞赏。

UPDATE:

我真正需要做的是:

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)
    });
});

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

1 个答案:

答案 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
    });
});

请记住:

  

模型是模式的编译版本。

我希望这可以帮到你