mongodb将元素推入到对象数组中

时间:2011-12-11 14:30:38

标签: mongodb

我有一个包含以下架构的集合:

{
  "_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}}
)

问题是它只更新数组中的第一个元素元素,而不是更新所有元素

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

指定多重更新选项:

db.dialogs.update(
  { "_id" : ObjectId("4ee3ddc346b3b8880a000000")},
  {$addToSet : {'msgs.$.deleted' : 2}},
  false,
  true
)

最后一个参数true告诉mongodb更新所有匹配的文档。 (第三个参数告诉mongodb不要沮丧)。

PS:上面假设您的原始查询和$操作是正确的,我没有在MongoDB中确认。