当前位置: 首页 > 知识库问答 >
问题:

Mongoose返回的模型无法更新

阎德义
2023-03-14

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

使用“保存”而不是“更新”

共有1个答案

曹涵润
2023-03-14

我不知道我是否理解

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

仅更新:(例如使用快递)

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

记住:

模型是模式的编译版本。

我希望这能帮助你

 类似资料:
  • 我想知道是否有任何方法可以更改由猫鼬,和方法返回的文档对象的可用字段的值,并通过应用到数据库中的更改来更新它们。下面的代码片段是我期望完成我想要的工作:

  • 问题内容: 我正在尝试在MongoDB中更新实例化模型(“地方”-我知道它可以在其他路线中使用),并且花了一段时间尝试正确地做到这一点。我还试图重定向回查看“位置”的页面,以查看更新的属性。 节点v0.4.0,Express v1.0.7,Mongoose 1.10.0 架构: 控制器/路线: }); 我尝试了多种方法,但似乎无法理解。 另外,我不是如何声明三个{name,capital和cont

  • 问题内容: 我有一个让我感到困惑的奇怪问题。我有一个模型: 变体条目如下所示: 我需要添加一个新字段-说“颜色”。所以我这样做是为了批量更新: 但是,“颜色”字段未设置-如果我再次浏览并注释掉该行,则它不会显示。我似乎无法弄清楚为什么要这样做。我有一个onSave事件,该事件已正确触发,因此可以保存。我也没有对版本结构进行任何检查- 即没有代码只允许代码和价格。我显然缺少了一些东西,但几个小时后我

  • 我是不是漏掉了什么?

  • 我有下面的课,我试图测试。我遇到问题的方法是,因为我试图存根/模拟行为,然后在测试中验证行为。

  • 我正在为我的一个项目使用Apache OpenNLP。我正在创建一个新模型来识别位置,因为预训练模型(en-ner-location.bin)没有这个位置。 这是代码: } 到目前为止,它运行良好。 问题是我无法将其他位置添加到我创建的自定义模型中。所以,我浏览了OpenNLP-README文档。 在那里,它说,“注意:为了训练模型,您需要所有的训练数据。目前没有一种机制可以用额外的数据更新随项目