【问题标题】:mongodb push element into array of objectsmongodb将元素推入对象数组
【发布时间】:2012-01-17 21:07:24
【问题描述】:

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

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

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

有什么想法吗?

【问题讨论】:

标签: mongodb


【解决方案1】:

指定多个更新选项:

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

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

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

【讨论】:

  • 不正确。他想要在这里更新单个文档的几个元素。并非所有匹配的文档。
猜你喜欢
  • 2016-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-12
  • 1970-01-01
  • 2020-07-08
  • 2014-01-17
  • 2017-12-05
相关资源
最近更新 更多