{
"_id" : 123,
"someKey" : "someValue",
"someArray" : [
{
"name" : "name1",
"someNestedArray" : [
{
"name" : "value_1",
"fame" : [
{
"goal" : "goal_1"
}
]
},
{
"name" : "value_2",
"fame" : [
{
"goal" : "goal_2"
}
]
}
]
}
]
}
我做的查询如下:
db.getCollection('city').find({"someArray.0.someNestedArray.1.fame.0.goal":"goal_2"},{"someArray.0.someNestedArray.":1})
但输出为:
{
"_id" : 123,
"someArray" : [
{}
]
}
获取输出的查询是什么:
{
"fame" : [
{
"goal" : "goal_2"
}
]
}
提前致谢。 当人们不知道索引时,还要告诉如何在嵌套数组中查找值。 我做的查询指定了数组元素的位置(someArray.0.someNestedArray.1.fame.0.goal)
答案 0 :(得分:2)
您可以使用以下查询:
db.test.find(
{'someArray.someNestedArray.fame.goal':'goal_1'},
{"someArray.someNestedArray.fame.goal":1,"_id":0}
)
你会得到这份文件:
{
"someArray" : [
{
"someNestedArray" : [
{
"fame" : [
{
"goal" : "goal_1"
}
]
},
{
"fame" : [
{
"goal" : "goal_2"
}
]
}
]
}
]
}
您也可以尝试使用$elemMatch
$ elemMatch运算符匹配包含数组字段的文档 至少有一个元素匹配所有指定的查询 标准。
db.test.find(
{
'someArray':{
$elemMatch:{
'someNestedArray':{
$elemMatch:{
'fame':{ $elemMatch: {"goal" : "goal_2" } }
}
}
}
}
},{"someArray.someNestedArray.fame.goal":1}
);
您可以尝试使用$unwind和$replaceroot返回子文档,并使用新的$filter聚合运算符在投影期间过滤数组。
希望这有帮助。