文档架构:
{,
"prop1" : "some value",
"prop2" : "another value",
"array1" : [
{
"field_a" : "value_a",
"field_b" : "value_b",
"array2" : [
]
},
{
"field_a" : "value_a",
"filed_b" : "value_b",
"array2" : [
]
},
{
"field_a" : "value_a",
"field_b" : "value_b",
"array2" : [
{
"key1" : "value1",
"key2" : "value2",
"key3" : "value3",
},
{
"key1" : "value1",
"key2" : "value2",
"key3" : "value4",
}
]
},
{
"field_a" : "value_a",
"field_b" : "value_b",
"array2" : [
{
"key1" : "value1",
"key2" : "value2",
"key3" : "value3",
},
{
"key1" : "value1",
"key2" : "value2",
"key3" : "value4",
}
]
}
],
}
我想投影
key1
、key2
,其中 key3
是 value4
,但仅限一次。
当我尝试投影 array.array2 "log": "$array1.array2"
时,它按预期返回:
"log" : [
[
],
[
],
[
{
"key1" : "value1",
"key2" : "value2",
"key3" : "value3",
},
{
"key1" : "value1",
"key2" : "value2",
"key3" : "value4",
}
],
[
{
"key1" : "value1",
"key2" : "value2",
"key3" : "value3",
},
{
"key1" : "value1",
"key2" : "value2",
"key3" : "value4",
}
]
],
一些调试,当我尝试使用下面的过滤器查询进行项目时,它正在打印空列表,
"variable": {
// $arrayElemAt: [
// {
$filter: {
input: "$array1.array2",
as: "response",
cond: { $eq: ["$$response.key3", "value4"] }
}
// },
// 0
// ]
},
"variable" : [
],
看起来它没有迭代
array2
数组的所有对象。
一个选项是:
db.collection.aggregate([
{
$match: {
"array1.array2.key3": "value4"
}
},
{
$set: {
variable: {
$first: {
$filter: {
input: "$array1.array2",
cond: {
$in: [
"value4",
"$$this.key3"
]
}
}
}
}
}
}
])