Azure 如何计算cosmos DB中的不同值
我在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" } ], "
[
{
"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,这不是同一个答案。他想数一份文件,但我想数所有文件