【问题标题】:Is there a way to 'remove' a field during a mongo aggregation?有没有办法在 mongo 聚合期间“删除”一个字段?
【发布时间】:2019-08-13 03:08:26
【问题描述】:

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

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

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

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

我找到了 $unset,但似乎只适用于更新。

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

【问题讨论】:

  • $project: { fieldYouDontWant: 0 } ex: $project: { addresses: 0 } 不工作吗?这应该返回所有内容减去提到的字段。

标签: mongodb aggregation


【解决方案1】:

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

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

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

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

{ $project: {
    addresses: 0
}}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-12
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-20
    相关资源
    最近更新 更多