mongodb 3.0.7 mongoose 4.1.12
我想推出新元素:" bbb" 置于外部orgs数组内的group数组...
原始mongo数据来自:
{
orgs: [
{
org: {
_bsontype: "ObjectID",
id: "123456789012"
},
groups: [
"aaa"
]
}
],
_id: {
_bsontype: "ObjectID",
id: "888888888888"
}
}
到此:
{
orgs: [
{
org: {
_bsontype: "ObjectID",
id: "123456789012"
},
groups: [
"aaa",
"bbb"
]
}
],
_id: {
_bsontype: "ObjectID",
id: "888888888888"
}
}
这是一个我不想要的硬编码解决方案 硬编码数组索引(参见:' orgs.0.groups')
dbModel.findByIdAndUpdate(
{ _id: ObjectId("888888888888".toHex()), 'orgs.org' : ObjectId("123456789012".toHex()) },
{ $push : { 'orgs.0.groups' : 'bbb'
}
},
{ safe: true,
upsert: false,
new : true
}
)
......我希望有一个简单的组织。$。群组'会工作,但没有。还试过了orgs.groups' ,也没有。 我是否真的需要首先检索orgs数组,识别索引 然后执行一些第二次操作来推送适当的orgs数组元素?
PS - 建议重复的答案没有解决这个问题
答案 0 :(得分:1)
找到解决方案,不得不使用
dbModel.update
不
dbModel.findOneAndUpdate nor dbModel.findByIdAndUpdate
使用' $'在多级文档中指示匹配的数组索引
'orgs.$.groups'
此代码有效:
dbModel.update(
{ _id: ObjectId("888888888888".toHex()), 'orgs.org' : ObjectId("123456789012".toHex()) },
{ $push : { 'orgs.$.groups' : 'bbb'
}
},
{ safe: true,
upsert: false,
new : true
}
)
我想知道这是不是猫鼬的错误?似乎奇怪的findOneAndUpdate无法正常工作。