• 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
    //      }
    //  ]
    // }
  • 相关阅读:
    【Android】 分享一个完整的项目,适合新手!
    Android笔记:Fragment与ViewPager组合时,如何在FragmentActicity获取Fragment对象
    android 获取日期
    Java: 分解List<HashMap<String, String>>
    android ExpandableListView实现不同的布局
    android: activity切换之效果
    android: activity之间切换的抽屉效果
    android 获取适配的bitmap等相关
    Eclipse改变外观,护眼模式
    安装 NoMachine(NX) client and server
  • 原文地址:https://www.cnblogs.com/luwei0915/p/13386965.html
Copyright © 2020-2023  润新知