我有一个包含以下架构的集合:
{
"_id" : ObjectId("4ee3ddc346b3b8880a000000"),
...
"msgs" : [{
"mid" : ObjectId("4ee3ddc346b3b8880a000000"),
"deleted" : []
},
{
"mid" : ObjectId("4ee3ddc346b3b8880a000100"),
"deleted" : []
}]
}
我想做这个查询: 对于特定的_id,在每个“已删除”数组中插入一个元素
所以在做完这个查询之后我会收到这样的信息:
{
"_id" : ObjectId("4ee3ddc346b3b8880a000000"),
...
"msgs" : [{
"mid" : ObjectId("4ee3ddc346b3b8880a000000"),
"deleted" : [2]
},
{
"mid" : ObjectId("4ee3ddc346b3b8880a000100"),
"deleted" : [2]
}]
}
我试图做的事情:
db.dialogs.update(
{ "_id" : ObjectId("4ee3ddc346b3b8880a000000")},
{$addToSet : {'msgs.$.deleted' : 2}}
)
问题是它只更新数组中的第一个元素元素,而不是更新所有元素
有什么想法吗?
答案 0 :(得分:1)
指定多重更新选项:
db.dialogs.update(
{ "_id" : ObjectId("4ee3ddc346b3b8880a000000")},
{$addToSet : {'msgs.$.deleted' : 2}},
false,
true
)
最后一个参数true
告诉mongodb更新所有匹配的文档。 (第三个参数告诉mongodb不要沮丧)。
PS:上面假设您的原始查询和$操作是正确的,我没有在MongoDB中确认。