【问题标题】:Mongoose update not working with embedded objects猫鼬更新不适用于嵌入式对象
【发布时间】:2015-09-15 04:01:58
【问题描述】:

我在 MEAN 堆栈中工作,但遇到了 Mongoose 问题。单个文档的更新工作正常(单个键:值),但是当我尝试用新对象更新嵌套对象时,它只是删除原始对象而不插入新对象。

在终端中直接在 mongo 中使用相同的查询,效果很好。但是从我的 Mongoose 模型中,我得到了上述行为。

我最终想要的查询更复杂并且使用了许多变量,因此我将代码简化为以下内容以突出问题:

Setup.update({name: "main"}, {$set: {"schedule.sunday.eleven_pm": { associates: 111, supervisors: 111}}}, function(err){
            if(err){
                console.log(err);
            }
            else{
                console.log('successfully updated main schedule setup')
                Setup.find({}, function(err, setup){
                    if(err){
                        console.log(err);
                    }
                    else{
                        res.json(setup);
                    }
                })
            }
        });

在我的数据库中给我这个:

"eleven_pm" : {

        }

但是从终端,相同的查询(从我的猫鼬查询中剪切和粘贴,只是在开头添加了“db.setups”:

db.setups.update({name: "main"}, {$set: {"schedule.sunday.eleven_pm": { associates: 111, supervisors: 111}}})

给我这个,想要的结果:

    "eleven_pm" : {
            "associates" : 111,
            "supervisors" : 111
        }

我尝试将其编写为 findOneAndUpdate(),但遇到了相同的行为。我在这里做一些非正统的事情吗?

非常感谢任何帮助。

【问题讨论】:

  • .update() 方法返回“numAffected”作为响应参数,而不是您期望的文档。请改用.findOneAndUpdate(),它会返回修改后的文档。常见错误。
  • 感谢您的回复,但我认为这不能解决我的问题。我不希望文件被退回。我上面发布的结果是在数据库中,而不是返回的文档。猫鼬更新方法实际上是删除(用空白覆盖)文档。另外,我在帖子中提到我也尝试了 findOneAndUpdate() 方法,但遇到了同样的问题行为。
  • 你在这里说的不可能是真的。请将“架构”发布到您用于更新的模型。这里的问题肯定是存在的。
  • 你说得对,我对我的数据库结构做了一个小改动,我忽略了为这个集合反向编辑我的 Mongoose Schema。现在,它工作正常。感谢您的帮助。
  • 由于这个问题被证明是严格的用户错误,我自己的,我最好删除这个问题还是保留它?再次感谢

标签: node.js mongodb mongoose database


【解决方案1】:

我的 Mongoose“架构”中没有修改我的数据库结构的一个小变化,两者之间的差异导致了上面解释的异常查询行为。

【讨论】:

    猜你喜欢
    • 2018-09-11
    • 2020-09-06
    • 1970-01-01
    • 1970-01-01
    • 2014-07-13
    • 2016-09-04
    • 2015-08-14
    • 2012-04-29
    • 2016-04-11
    相关资源
    最近更新 更多