demo_10_04 云数据库聚合_group_02

Posted luwei0915

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了demo_10_04 云数据库聚合_group_02相关的知识,希望对你有一定的参考价值。

// 1. 数据库数据
// {
//  "avatar": { // 集合(表名)
//      "data": [ // 数据
//          {
//            "_id": "1",
//            "alias": "john",
//            "region": "asia",
//            "scores": [40, 20, 80],
//            "coins": 100
//          },
//          {
//            "_id": "2",
//            "alias": "arthur",
//            "region": "europe",
//            "scores": [60, 90],
//            "coins": 20
//          },
//          {
//            "_id": "3",
//            "alias": "george",
//            "region": "europe",
//            "scores": [50, 70, 90],
//            "coins": 50
//          },
//          {
//            "_id": "4",
//            "alias": "john",
//            "region": "asia",
//            "scores": [30, 60, 100, 90],
//            "coins": 40
//          },
//          {
//            "_id": "5",
//            "alias": "george",
//            "region": "europe",
//            "scores": [20],
//            "coins": 60
//          },
//          {
//            "_id": "6",
//            "alias": "john",
//            "region": "asia",
//            "scores": [40, 80, 70],
//            "coins": 120
//          }
//      ]
//  }
// }

// 02. 聚合操作 group
// 聚合阶段,将输入记录按给定表达式分组,输出时每个记录代表一个分组,每个记录的 _id 是区分不同组的 key。
// 输出记录中也可以包括累计值,将输出字段设为累计值即会从该分组中计算累计值。
‘use strict‘;
const db = uniCloud.database();
const $ = db.command.aggregate;
exports.main = async(event, context) => {
    let res = await db.collection(‘avatar‘).aggregate()
        // 按多个值分组
        // 按各个区域(region)获得相同最高分(score)的来分组,并求出各组虚拟币(coins)的总量:
        // 如果没有相同最高分的组,则单独为一组
        .group({
            // 第一个字段 _id
            _id: {
                region: ‘$region‘,
                maxScore: $.max(‘$scores‘)
            },
            // 第二个字段: totalCoins
            totalCoins: $.sum(‘$coins‘)
        })
        .end();
    return res;
};

// 聚合之后的返回值
// {
//  "affectedDocs": 4,
//  "data": [{               
//          "_id": {                    
//              "maxScore": 20,        // "_id": "5",
//              "region": "europe"
//          },
//          "totalCoins": 60
//      },
//      {
//          "_id": {
//              "maxScore": 100,      //  "_id": "4",
//              "region": "asia"
//          },
//          "totalCoins": 40
//      },
//      {
//          "_id": {
//              "maxScore": 90,       // "_id": "3" + "_id": "2"  maxScore 相同 
//              "region": "europe"
//          },
//          "totalCoins": 70          // totalCoins相加 20 + 50
//      },
//      {
//          "_id": {
//              "maxScore": 80,      // "_id": "1" + "_id": "6",
//              "region": "asia"
//          },
//          "totalCoins": 220        // 100 + 120
//      }
//  ]
// }

以上是关于demo_10_04 云数据库聚合_group_02的主要内容,如果未能解决你的问题,请参考以下文章

MongoDb 将 $group '_id' 空值聚合为不同的

使用 group by 聚合计数 > 100 万用户 的 Mysql 查询性能变慢

如何聚合列表中的所有数据?

Hibernate 列“user1_.user_id”必须出现在 GROUP BY 子句中或在聚合函数中使用

Oracle_group by分组查询_深入

ElasticSearch_04_ES的嵌套聚合,下钻分析,聚合分析