1

我遇到了一个问题,我需要更新在更大数组中包含的数组中找到的特定字段,该数组与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 的文档,仅在数组中搜索具有并将其各个“已完成”字段更改为 trueoccupied.Greece的元素。"deadline": {$gt: ISODate(current-date)}

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

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

4

1 回答 1

0

恐怕这是不可能的。从文档中

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

这在SERVER-1243下的 MongoDB Jira 中进行了跟踪。

jira 中有很多相关的功能请求,主要是在“虚拟集合”主题下。

于 2013-02-05T17:16:43.817 回答