在 MongoDB 中使用 $group 时如何在返回文档中获取附加字段?

Posted

技术标签:

【中文标题】在 MongoDB 中使用 $group 时如何在返回文档中获取附加字段?【英文标题】:How to get an additional field in return document when using $group in MongoDB? 【发布时间】:2020-06-13 04:16:06 【问题描述】:

我想通过他们提交的订单找出公司中表现最好的销售代表。 因此,我在发票模型中按名称和总收入对销售代表进行了分组。发票模型表示销售代表提交的发票架构。

analytics.controller.js

exports.topBestSalesrep = (req,res)=> 
    Invoice
        .aggregate(
            [
                
                    $group : 
                        _id : '$salesrepName',                 
                        totalSum:$sum:'$totalValue'           
                    
                ,
                
                    $sort:totalSum:-1
                ,
                
                     $limit : 10
                ,
                // 
                //     $project: _id:1, area:'$customerArea' 
                // 
            ]
        )
        .then(data=>
            return res.status(200).json(data);
        )
        .catch(err =>
            return res.status(400).json(err);
        )


invoice.model.js

  salesrepName: 
    type: String
  ,
  customerArea:
    type:String,
    required:true
  ,
  totalValue: 
    type: Number,
    required: true
  ,
 

我想要什么?

这里我想要返回文档中的salesrepNamecustomerArea 字段。

我尝试了什么?

但即使我使用了$project,我也只能在返回的文档中获得salesrepNametotalSum 字段。

我的问题

如何在返回的文档中获取customerArea 字段?

【问题讨论】:

【参考方案1】:

从记忆中输入,所以它可能是错误的语法,但是在 $group.in mongo docs 下查找 $push


                
                    $group : 
                        _id : '$salesrepName',                 
                        totalSum:$sum:'$totalValue'  ,
                        items:  $push: $$ROOT    // this emits the whole.object, becomes an array
                    
                ,

然后您可以在后续阶段进一步预测您需要的值

【讨论】:

以上是关于在 MongoDB 中使用 $group 时如何在返回文档中获取附加字段?的主要内容,如果未能解决你的问题,请参考以下文章

在 MongoDB 的聚合管道中获取 $group 之后的输入文档中的字段

在 MongoDB 的聚合管道中获取 $group 之后的输入文档中的字段

如何使用节点js在mongodb中映射两个集合[重复]

Mongodb聚合$group阶段耗时较长

MongoDb 聚合在 $group 中使用 $sortByCount

如何在 mongodb 中查找包含 NaN 值的字段的 $avg 和 $sum?