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操作已经充当输入操作,并且不能将两者混合。有任何想法吗?
使用$addFields聚合阶段而不是$project. 手册写道$addFields:
$addFields 阶段相当于 $project 阶段,它显式指定输入文档中的所有现有字段并添加新字段。
因此,在代码中替换$projectby就足以实现所需的行为。$addFields
这是@Veeram 在评论中建议的。
| 归档时间: |
|
| 查看次数: |
3069 次 |
| 最近记录: |