有没有办法在mongo聚合期间“删除”字段?

时间:2019-08-12 18:56:06

标签: mongodb aggregation

有没有一种方法可以在聚合期间删除字段? 我得到的结果看起来像这样:

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

我正在尝试从结果中排除“地址”:

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

我发现$ unset,但似乎只能在更新上使用。

我也不想手动将其他项“分组”,因为我需要返回除我要排除的属性以外的所有内容。选择性地添加似乎在聚合中非常容易,但是选择性地删除似乎更加复杂。欣赏这里的任何想法。

1 个答案:

答案 0 :(得分:0)

在管道中使用$project阶段。使用投影时,有两个可用选项。

第一个是您可以通过指定要包含的值为1的字段来将返回的字段列入白名单。投影阶段看起来像这样:

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

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

{ $project: {
    addresses: 0
}}

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