【发布时间】: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