我正在使用包含 $project
阶段的 MongoDB 聚合查询,该阶段包含 $filter
运算符:
[
'$project' => [
'array' => [
'$filter' => [
'input' => '$array',
'as' => 'array',
'cond' => [
'$in' => [
"value",
'$$array.subarray'
]
]
]
]
]
]
这将过滤掉子数组中不具有特定值的所有数组元素。
虽然这按预期工作,但这也会从聚合查询中删除所有其他字段,并且只将数组字段传递到下一阶段。我怎样才能告诉 $project
阶段除了过滤那些数组元素之外不要删除任何其他字段?
我读到排除单个字段会导致包含所有其他字段,但除此之外我没有要排除的字段,我无法向此 $project< 添加排除操作
阶段,因为 $filter
操作已经充当输入操作,您不能将两者混用。有什么想法吗?
最佳答案
使用 $addFields
聚合阶段而不是 $project
。 $addFields
manual阅读:
The $addFields stage is equivalent to a $project stage that explicitly specifies all existing fields in the input documents and adds the new fields.
因此,只需将代码中的 $project
替换为 $addFields
即可实现所需的行为。
这是@Veeram 在评论中建议的。
关于MongoDB:$project 和 $filter,包括所有其他属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54835395/