有没有办法在 mongo 聚合期间 'remove' 一个字段?

Is there a way to 'remove' a field during a mongo aggregation?

有没有办法在聚合期间删除字段? 我的结果如下所示:

{
"firstName":"Patient1",
"lastName":"last",
"addresses":[
    {
     "street1":"1011 Happy Lane",
     "street2":"Apt 1",
    },
],
"phone":"11111111"
}

我试图从结果中排除 'addresses':

{
"firstName":"Patient1",
"lastName":"last",
"phone":"11111111"
}

我找到了 $unset,但似乎只对更新有效。

我也不想手动 'group' 其他项目,因为我需要 return 除了要排除的属性之外的所有内容。有选择地添加在聚合中似乎很容易,但有选择地删除似乎有点复杂。感谢这里的任何想法。

在管道中使用 $project 阶段。使用投影时,您有两种选择。

首先,您可以通过指定要包含的值为 1 的字段将返回的字段列入白名单。投影舞台看起来像这样:

{ $project: {
    firstName: 1,
    lastName: 1,
    phone: 1
}}

第二个是您可以通过指定您不想包含的值为 0 的字段来将返回的字段列入黑名单。投影舞台看起来像这样:

{ $project: {
    addresses: 0
}}

这两种方法都有其优点,您应该使用哪种方法在很大程度上取决于您的用例。一个好的经验法则是,如果您只需要某些字段并且不想在添加新字段时修改投影阶段,则应使用白名单方法,但如果您只想排除某些字段而允许任何要包含在结果中的新字段,您应该使用黑名单方法。