Mongodb 如何使用elemMatch匹配嵌套数组

Mongodb 如何使用elemMatch匹配嵌套数组,mongodb,Mongodb,我有一些这样的数据结构 { a: 1, array1: [ { b: 2 array2: [ { // this is my target c: 3, d: 3 }, { c: 4, d: 4 } ] }, { b: 3

我有一些这样的数据结构

{
  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的元素。但是我不知道如何匹配数组1的数组2的元素
{c:3,d:3}

试试这个,它对我帮助很大

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

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

例如,如果您希望查询c和d,并且需要它们属于同一个子文档,则可以像这样查询

{"array1.array2" : {"$elemMatch" : {"c" : 3, "d":3} } } 
注意:如果查询单个字段,则实际上不需要使用
$elemMatch
(因为没有关联)

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

{"array1.b" : 2} 

到底是什么意思?这很容易被误解。您只是想匹配您在
“array1.array2.c”:3
上标记的文档吗?(大提示)。或者您希望只投影匹配的元素?这看起来非常抽象,您可能会将答案误解为真实数据。实际上,我想匹配该元素并将其投影。就像我说的,“意思是什么?”给定我给您的上述查询表达式(这是您在这里真正需要的,而不是
$elemMatch
),那么您希望返回什么?如果你只期望
c:3
而不是
c:4
,那么这对问题的答案会产生很大的影响。你可能会注意到这通常是不必要的。见上面的评论。