MongoDB更新符合条件的子数组字段

时间:2013-02-05 16:39:00

标签: mongodb

我遇到了一个问题,我需要更新在 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)}数组并更改其个人"已完成& #34;字段为真。

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

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

1 个答案:

答案 0 :(得分:0)

我担心这是不可能的。来自the documentation

  

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

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

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