MongoDB $ elemMatch $ elemMatch和良好做法

时间:2014-04-09 10:05:22

标签: mongodb

H,

我试图更新此对象中的版本字段,但我无法使用2个嵌套的$ match进行查询。所以我想要的是获取文件ID为12和版本1的记录。

我还会问,如果mongoDB中有一个嵌套数组(如此对象),那么它是否是一个好习惯......

查询:

db.collection.find({"my_uuid":"434343"},{"item":{$elemMatch:{"file_id":12,"changes":{$elemMatch:{"version":1}}}}}).pretty()

对象:

{
  "my_uuid": "434343",
  "item": [
    {
      "file_id": 12,
      "no_of_versions" : 1,
      "changes": [
        {
          "version": 1,
          "commentIds": [
            4,
            5,
            7
          ]
        },
        {
          "version": 2,
          "commentIds": [
            10,
            11,
            15
          ]
        }
      ]
    },
    {
      "file_id": 234,
      "unseen_comments": 3,
      "no_of_versions" : 2,
      "changes": [
        {
          "version": 1,
          "commentIds": [
            100,
            110,
            150
          ]
        }
      ]
    }
  ]
}

谢谢

1 个答案:

答案 0 :(得分:0)

如果您希望整个文档满足结果中返回的条件,那么我认为没关系。但是,如果要将itemchanges的数组内容限制为仅匹配元素,则可能会出现问题。这是因为,您必须在投影中使用$ positional运算符来限制数组的内容,并且只有一个此类运算符可以出现在投影中。因此,您将无法限制文档中多个数组的内容。