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 返回的模型无法更新的主要内容,如果未能解决你的问题,请参考以下文章

findOneAndUpdate (mongoose) 返回 true 以更新模型中的嵌套文档,但没有更新

如何在 Mongoose 中更新/插入文档?

如何在 Mongoose 中更新/插入文档?

如何在 Mongoose 中更新/插入文档?

如何在 Mongoose 中更新/插入文档?

Mongoose .findByIdAndUpdate() 控制台记录返回但无法分配给属性