我有一个如下的集合:
[
{
"array1": [
{
"array2": [
{
"array3": [ 1, 2 ]
},
{
"array3": [ 2, 3 ]
},
{
"array3": [ 3, 4 ]
},
{
"array3": [ 4, 5 ]
}
]
}
]
}
]
并且我只想过滤
array2
中包含 1 或 5 的 array3
元素。[
{
"array1": [
{
"array2": [
{
"array3": [ 1, 2 ]
},
{
"array3": [ 4, 5 ]
}
]
}
]
}
]
我尝试使用此聚合的
$filter
运算符,但它没有按预期工作。
db.collection.aggregate([
{
"$project": {
"array1.array2": {
$filter: {
"input": "$array1.array2",
"cond": {
"$in": [
"$$this.array3",
[ 1, 5 ]
]
}
}
}
}
}
])
认为您应该迭代
array1
数组中的每个元素,并通过array2
和$setIntersection
(不等于空数组)运算符过滤$ne
数组中包含1、5的元素。
db.collection.aggregate([
{
"$addFields": {
"array1": {
$filter: {
input: {
$map: {
input: "$array1",
as: "array1",
in: {
array2: {
$filter: {
input: "$$array1.array2",
cond: {
$ne: [
{
$setIntersection: [
"$$this.array3",
[
1,
5
]
]
},
[]
]
},
}
}
}
}
},
cond: {
$ne: [
"$$this.array2",
[]
]
}
}
}
}
}
])