Stored procedures Azure Cosmos DB SQL API存储过程示例
我是Azure Cosmos DB的新手,我正在尝试使用SQLAPI创建一个存储过程来返回数据 以以下内容为例: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
{
"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并将其公开给一些外部接口。我也在尝试熟悉语法。请编辑您的问题,以显示到目前为止您做了什么,以及您遇到了什么困难(输出问题、错误等)。另外,请举例说明您的预期输出。我不确定你所说的“根数据”是什么意思——这是一个很好的解释。