【问题标题】:Add a field to $project pipeline in mongodb aggregate? [duplicate]在 mongodb 聚合中向 $project 管道添加一个字段? [复制]
【发布时间】:2016-02-26 04:22:40
【问题描述】:

我只想通过$project管道添加一个新字段,让其他属性通过进一步处理,我知道你可以这样做:

db.people.aggregate([
     {$project: {name: 1, address: 1, birth_month: {$month: "$birthdate"}}}
])

但是随着文档越来越复杂,我很难在$project中写出20++的字段名。我可以通过聚合管道添加一个字段,这样我就不必一个一个地指定其他字段,比如

db.people.aggregate([
     {$appendField: {birth_month: {$month: "$birthdate"}}}
])

【问题讨论】:

  • 在这种情况下不要添加 20+ 字段,而是将该字段放在您不想要的项目中 {$project: {name: 0}} 在这种情况下它将选择除名称以外的所有字段。跨度>
  • 我想你误会了,我想保留原始文档的所有字段,但要添加一个字段(birth_month)
  • .... 并且无需在 $project 中写下其他字段名称
  • 谢谢,是的,这正是我想要的。不幸的是,OP 没有批准它作为答案,所以我应该在这里做什么?回答我自己的问题?

标签: mongodb aggregation-framework


【解决方案1】:

最后,我能够解决这个问题。只需在此处阅读旧帖子(MongoDB $project: Retain previous pipeline fields,感谢@Johnny HK)。这是我的解决方案(mongo 2.6 或更高版本):

db.people.aggregate([
  {$project: {doc: "$$ROOT", birth_month: {$month: "$birthdate"}}}
  {$group: {_id: "$doc.gender"} } <-- here you can use fields of the original doc via $doc
])

【讨论】:

    猜你喜欢
    • 2018-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    • 1970-01-01
    • 2017-05-27
    • 1970-01-01
    相关资源
    最近更新 更多