Stored procedures Azure Cosmos DB SQL API存储过程示例

Stored procedures Azure Cosmos DB SQL API存储过程示例,stored-procedures,azure-cosmosdb,azure-cosmosdb-sqlapi,Stored Procedures,Azure Cosmosdb,Azure Cosmosdb Sqlapi,我是Azure Cosmos DB的新手,我正在尝试使用SQLAPI创建一个存储过程来返回数据 以以下内容为例: { "id":"123", "fname" : "John", "lname" : "Doe", "receivedTime" : "08/08/2019 09:54:57", "subject

我是Azure Cosmos DB的新手,我正在尝试使用SQLAPI创建一个存储过程来返回数据

以以下内容为例:

{ 
  "id":"123",
  "fname" : "John",
  "lname" : "Doe",
  "receivedTime" : "08/08/2019 09:54:57",
  "subjects" : [
{
   "subjectid" : "01",
   "subjectname" : "English"
   "subjectmark" : "80"
},
{
   "subjectid" : "02",
   "subjectname" : "Math"
   "subjectmark" : "70"
}
]
}
如何构建存储过程以返回根数据以及subjectmarks的平均值?

请尝试以下操作:

function sample() {
    var collection = getContext().getCollection();

    var isAccepted = collection.queryDocuments(
        collection.getSelfLink(),
        'SELECT * FROM root r',
    function (err, feed, options) {
        if (err) throw err;

        if (!feed || !feed.length) {
            var response = getContext().getResponse();
            response.setBody('no docs found');
        }
        else {
            var response = getContext().getResponse();
            for(var x in feed){
                var totalmark = 0;
                var avargemark = 0;
                for(var y in feed[x].subjects){
                    totalmark += parseInt(feed[x].subjects[y].subjectmark);
                }
                avargemark = parseFloat(totalmark)/feed[x].subjects.length;
                feed[x].avargemark = avargemark;
            }

            var body = feed;
            response.setBody(JSON.stringify(body));
        }
    });

    if (!isAccepted) throw new Error('The query was not accepted by the server.');
}

顺便说一句,存储过程的作用域始终是分区键。您需要提供一个分区值来执行此操作。

是否有特别需要存储过程的原因?这可能是通过直接查询来完成的。我希望在需要时调用该过程,并且可以注册proc并将其公开给一些外部接口。我也在尝试熟悉语法。请编辑您的问题,以显示到目前为止您做了什么,以及您遇到了什么困难(输出问题、错误等)。另外,请举例说明您的预期输出。我不确定你所说的“根数据”是什么意思——这是一个很好的解释。