MongoDB:带有$ filter的$ project,包括所有其他属性

时间:2019-02-22 21:24:41

标签: mongodb aggregation-framework

我正在使用一个MongoDB聚合查询,该查询包含一个$project阶段,该阶段包含一个$filter运算符:

[
    '$project' => [
        'array' => [
            '$filter' => [
                'input' => '$array',
                'as' => 'array',
                'cond' => [
                    '$in' => [
                        "value",
                        '$$array.subarray'
                    ]
                ]
            ]
        ]
    ]
]

这会过滤掉子数组中所有没有特定值的数组元素。

尽管这可以按预期工作,但是这也会从聚合查询中删除所有其他字段,并且仅将数组字段传递到下一个阶段。我该如何告诉$project阶段除过滤那些数组元素之外不要删除任何其他字段?

我已阅读到,排除单个字段会导致包括所有其他字段,但是除了我没有要排除的字段外,我无法在此$project阶段添加排除操作,因为$filter操作已充当输入操作,并且您不能将两者混用。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

使用$addFields聚合阶段而不是$project$addFields manual读为:

  

$ addFields阶段等效于$ project阶段,该阶段显式指定输入文档中的所有现有字段并添加新字段。

因此,在代码中用$project替换$addFields足以归档所需的行为。

这是@Veeram在评论中建议的。