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
,那么这对问题的答案会产生很大的影响。你可能会注意到这通常是不必要的。见上面的评论。