如何使用elemMatch匹配嵌套数组

时间:2016-03-23 01:41:47

标签: mongodb

我有一些像这样的数据结构

{
  a: 1,
  array1: [
    {
      b: 2
      array2: [
        { 
          // this is my target
          c: 3,
          d: 3
        },
        {
          c: 4,
          d: 4
        }          
      ]
    },
    {
      b: 3
      array2: [
        {
          c: 5,
          d: 5
        },
        {
          c: 6,
          d: 6
        }          
      ]
    }
  ]
}

我知道使用{"array1" : {"$elemMatch" : {"b" : 2} } }来匹配第一级array1的元素。但我不知道如何匹配array1的array2的元素{c: 3, d: 3}

2 个答案:

答案 0 :(得分:7)

$elemMatch用于表示同一嵌套结构中多个字段之间的关联。

例如。如果您要查询c和d并且需要它们属于同一个子文档,您可以查询它。

{"array1.array2" : {"$elemMatch" : {"c" : 3, "d":3} } } 

注意:如果你在单个字段上查询,你真的不需要使用$elemMatch(因为没有关联)

例如,在您的查询示例中,您可以改为执行

{"array1.b" : 2} 

答案 1 :(得分:3)

试试这个,它对我有很大的帮助。

{ 
  "array1": {
    "$elemMatch": {
      "array2": {
        "$elemMatch": {
          "c": 3
        }
      }
    }
  }
}