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

Luk*_*eLR 3 mongodb aggregation-framework

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

[
    '$project' => [
        'array' => [
            '$filter' => [
                'input' => '$array',
                'as' => 'array',
                'cond' => [
                    '$in' => [
                        "value",
                        '$$array.subarray'
                    ]
                ]
            ]
        ]
    ]
]
Run Code Online (Sandbox Code Playgroud)

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

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

我读过,排除单个字段会导致包含所有其他字段,但除此之外,我没有要排除的字段,我无法在此阶段添加排除操作$project,因为该$filter操作已经充当输入操作,并且不能将两者混合。有任何想法吗?

Luk*_*eLR 6

使用$addFields聚合阶段而不是$project. 手册写道$addFields:

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

因此,在代码中替换$projectby就足以实现所需的行为。$addFields

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