mongo aggregate 分组之后,如何返回一个不在分组条件的列。

{
    "cityCode":300001,
    "cityName":"上海",
    "actualPaidFee:1000,
    "outStatus":6
}

上看是我的数据库文档结构

下面是我的聚合统计

db.onlinepartner_distribute_order_log.aggregate([
    {
         $match:{"outStatus":{$ne:4}}
    },
    {
        $group:{"_id":{"cityCode":"$cityCode"},"count":{"$sum":1},"totalSale":{"$sum":"$actualPaidFee"}}
    },
    {
        $unwind:"_id"
    }
]);

查询结果结构如下:

{
    "_id":300001,
    "count":1,
    "totalSale":2000
}

我希望添加一个 cityName 的属性,该怎么做?### 问题描述

问题出现的环境背景及自己尝试过哪些方法

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

你期待的结果是什么?实际看到的错误信息又是什么?

阅读 2k
1 个回答

这其实是一个所有数据库通用的问题。假设你有10条记录的cityCode都是300001,但是它们的cityName各不相同,可能是“北京”、“上海”、“天津”等等。那么按cityCode分组的时候你希望得到哪一个cityName
当然从你的情况来讲,cityCodecityName应该是一一对应的,所以聚合取哪一个都一样。这种情况下,把cityName加到分组条件的话,结果是一样的,你就可以取到cityName了。
另外一种可能性是,你不在乎有多少不同的cityName(虽然我觉得这种可能性不太大),就要随便取一个。那么可以用$first/$last来取:

{
    $group:{"_id":{"cityCode":"$cityCode"}, "cityName": {"$first": "$cityName"}, "count":{"$sum":1},"totalSale":{"$sum":"$actualPaidFee"}}
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进