【问题标题】:MongoDB update fields of subarrays that meet criteriaMongoDB 更新满足条件的子数组的字段
【发布时间】:2013-01-20 16:01:54
【问题描述】:

我遇到了一个问题,我需要更新在一个更大数组中找到的特定字段,该数组包含在一个匹配 MongoDB v2.2.3 的某些条件的更大数组中。

我有以下 mongodb 示例文档。

{
  _id: ObjectId("50be30b64983e5100a000009"),
  user_id: 0
  occupied: {
    Greece: [
      {
        user_id: 3,
        deadline: ISODate("2013-02-08T19:19:28Z"),
        fulfilled: false
      },
      {
        user_id: 4,
        deadline: ISODate("2013-02-16T19:19:28Z"),
        fulfilled: false
      }
    ],
    Italy: [
      {
        user_id: 2,
        deadline: ISODate("2013-02-15T19:19:28Z"),
        fulfilled: false
      }
    ]
  }
}

occupied 数组中的每个国家/地区都有自己的一组数组。

我要做的是找到user_id 为0 的文档,仅在occupied.Greece 数组中搜索具有"deadline": {$gt: ISODate(current-date)} 的元素,并将它们各自的“已完成”字段更改为true。

我尝试了 $$elemMatch 运算符,但它们只匹配查询中的第一个数组元素,而我需要它根据给定条件匹配 all 符合条件的元素,并且无需多次运行相同的查询或在客户端处理数组即可进行更新。

是否没有针对单个文档中的通用更新的服务器端解决方案?我正在使用 PHP 进行开发,尽管对此的解决方案应该是通用的。

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    恐怕这是不可能的。来自the documentation

    请记住,位置$ 运算符充当更新查询选择器第一个匹配的占位符。 [强调不是我的]

    这是在 SERVER-1243 下的 MongoDB Jira 中跟踪的。

    jira 中有相当多的相关功能请求,主要在主题“virtual collections”下。

    【讨论】:

    • 希望至少有一个肮脏的解决方案。尽管如此,还是感谢您提供 jira 链接。
    猜你喜欢
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    • 2022-01-08
    • 1970-01-01
    • 2020-05-12
    • 2022-08-04
    相关资源
    最近更新 更多