我正在使用一个MongoDB聚合查询,该查询包含一个$project
阶段,该阶段包含一个$filter
运算符:
[
'$project' => [
'array' => [
'$filter' => [
'input' => '$array',
'as' => 'array',
'cond' => [
'$in' => [
"value",
'$$array.subarray'
]
]
]
]
]
]
这会过滤掉子数组中所有没有特定值的数组元素。
尽管这可以按预期工作,但是这也会从聚合查询中删除所有其他字段,并且仅将数组字段传递到下一个阶段。我该如何告诉$project
阶段除过滤那些数组元素之外不要删除任何其他字段?
我已阅读到,排除单个字段会导致包括所有其他字段,但是除了我没有要排除的字段外,我无法在此$project
阶段添加排除操作,因为$filter
操作已充当输入操作,并且您不能将两者混用。有什么想法吗?
答案 0 :(得分:0)
使用$addFields
聚合阶段而不是$project
。 $addFields
manual读为:
$ addFields阶段等效于$ project阶段,该阶段显式指定输入文档中的所有现有字段并添加新字段。
因此,在代码中用$project
替换$addFields
足以归档所需的行为。
这是@Veeram在评论中建议的。