Azure 如何计算cosmos DB中的不同值

Azure 如何计算cosmos DB中的不同值,azure,azure-cosmosdb,Azure,Azure Cosmosdb,我在Cosmos DB中创建了一些文档,如下所示: [ { "class": "class01", "student": { "lastReport": [ { "Name": "st01", "score": "C" }, { "Name": "st02", "score": "B" } ], "

我在Cosmos DB中创建了一些文档,如下所示:

[
  {
    "class": "class01",
    "student": {
      "lastReport": [
        {
          "Name": "st01",
          "score": "C"
        },
        {
          "Name": "st02",
          "score": "B"
        }
      ],
      "lastTime": "2018-05-10"
    }
  },
  {
    "class": "class02",
    "student": {
      "lastReport": [
        {
          "Name": "st03",
          "score": "C"
        },
        {
          "Name": "st01",
          "score": "A"
        }
      ],
      "lastTime": "2018-05-10"
    }
  },
  {
    "class": "class01",
    "student": {
      "lastReport": [
        {
          "Name": "st01",
          "score": "C"
        },
        {
          "Name": "st02",
          "score": "A"
        },
        {
          "Name": "st03",
          "score": "B"
        }
      ],
      "lastTime": "2018-05-10"
    }
  }
]
[
  {
    "score": "C",
    "Num" : 3
  },
{
    "score": "B",
    "Num" : 2
  },
{
    "score": "A",
    "Num" : 2
  }
  ]
你能帮我计算所有数据中的分数值吗?我的期望是这样的结果:

[
  {
    "class": "class01",
    "student": {
      "lastReport": [
        {
          "Name": "st01",
          "score": "C"
        },
        {
          "Name": "st02",
          "score": "B"
        }
      ],
      "lastTime": "2018-05-10"
    }
  },
  {
    "class": "class02",
    "student": {
      "lastReport": [
        {
          "Name": "st03",
          "score": "C"
        },
        {
          "Name": "st01",
          "score": "A"
        }
      ],
      "lastTime": "2018-05-10"
    }
  },
  {
    "class": "class01",
    "student": {
      "lastReport": [
        {
          "Name": "st01",
          "score": "C"
        },
        {
          "Name": "st02",
          "score": "A"
        },
        {
          "Name": "st03",
          "score": "B"
        }
      ],
      "lastTime": "2018-05-10"
    }
  }
]
[
  {
    "score": "C",
    "Num" : 3
  },
{
    "score": "B",
    "Num" : 2
  },
{
    "score": "A",
    "Num" : 2
  }
  ]

Cosmos DB本机不支持Group by,因此没有现成的方法来执行此查询

然而,documentdb lumenize允许您使用存储过程来实现这一点。我自己也没用过,但可能值得一看

链接是:


正如@Sajeetharan所说,到目前为止,azure cosmos db不支持Groupby。但是,我建议您使用
存储过程
来实现您的需求

基于您的示例文档,我向您提供了一个示例存储过程。请参考它

function sample() {
    var collection = getContext().getCollection();
    var isAccepted = collection.queryDocuments(
        collection.getSelfLink(),
        'SELECT a.score FROM  c join a in c.student.lastReport',
        function (err, feed, options) {
            if (err) throw err;
            if (!feed || !feed.length) getContext().getResponse().setBody('no docs found');
            else {
                var map = {};
                var returnResult = [];
                for(var i = 0;i<feed.length;i++){
                    var s = feed[i].score;
                    if(map.hasOwnProperty(s)){
                        map[s] ++;   
                    }else {
                        map[s] = 1;   
                    }         
                }

                for(var key in map){
                    console.log(key)
                    var obj = {
                        "score":key,
                        "num" : map[key]
                    };
                    returnResult.push(obj);
                }
                getContext().getResponse().setBody(returnResult);
            }
        });

    if (!isAccepted) throw new Error('The query was not accepted by the server.');
}
函数示例(){
var collection=getContext().getCollection();
var isAccepted=collection.queryDocuments(
collection.getSelfLink(),
'从c中选择a.score在c.student.lastReport中加入a',
功能(错误、馈送、选项){
如果(错误)抛出错误;
如果(!feed | |!feed.length)getContext().getResponse().setBody('未找到文档');
否则{
var-map={};
var returnResult=[];

对于(var i=0;igroupby),现在在cosmosDB中是可能的 此文档包含所有详细信息

可能重复@Sajeetharan我认为这个问题与我的不同question@leon是的,它不同,但答案是sameI saw,这不是同一个答案。他想数一份文件,但我想数所有文件