【发布时间】:2014-11-26 01:37:08
【问题描述】:
我的文档结构大致类似于以下内容:
{
"_id": "theIdOfThisObject",
"subdoc": {
"array": [
[
{
"parameters": {},
"winner": null,
"participants": [
"Person1",
"Person2"
]
},
{
"parameters": {},
"winner": null,
"participants": [
"Person3",
"Person4"
]
}
],
[]
]
},
}
我完全试图替换嵌套数组中的一个子文档。我不需要搜索它 - 我知道确切的位置。
例如,我试图用
替换第一个子文档 "parameters": {"frog":20},
"winner": "Person1",
"participants": [
"Person1",
"Person2"
]
我们会说它被保存为一个名为newObject 的对象。
我希望下面的代码可以工作(Model 是一个真正的 Mongoose 模型):
Model.findByIdAndUpdate('theIdOfThisObject',{$set: {'subdoc.array.0.0':newObject}}, function(err,doc){
console.log('doc is returned, but nothing is updated')
});
我不知道发生了什么以及为什么这不起作用。有人有什么建议吗?我一直在使用 MongoDB 的原生节点驱动程序很长一段时间(3 年),但 Mongoose 对我来说相当新。
编辑 - 根据评论请求添加架构
架构非常简单。如下所示:
var Schema = new mongoose.Schema({
subdoc: {
array: [{}]
}
});
其中还有其他字段,但在这种情况下,这是唯一重要的字段。我的理解是,让 Schema 有一个 [{}] 意味着会有一个任何类型的 JSON 排列的数组。 Schema 还允许我最初设置有问题的子文档 - 它只是不允许我出于任何原因对其进行更新。
【问题讨论】:
-
您是否检查了捕获结果并检查是否返回了匹配的文档。如果没有返回 - 你的 id 可能是错误的。
-
另外请发布您的架构。可能是字段不匹配。
-
@BatScream - 刚刚添加了我的架构(或者更确切地说是与此问题有关的部分)。此外,我已经在检查回调的“doc”部分 - 绝对是正确的文档,只是没有更新的位。
标签: node.js mongodb mongoose mongodb-query node-mongodb-native