是否可以从azure函数运行Cosmos DB存储过程(在azure portal中创建sp)(例如时间触发器)。
我需要的是按时间触发查询集合中的文档(输入绑定),修改其中的一些字段并更新(如DocumentClient.UpsertDocumentAsync
)并将更新的文档存储回集合。
答案 0 :(得分:4)
第1步:请在cosmos db中创建存储过程。
示例存储过程js代码:
function sample() {
var collection = getContext().getCollection();
var isAccepted = collection.queryDocuments(
collection.getSelfLink(),
'SELECT * FROM root r where r.id = "1"',
function (err, feed, options) {
if (err) throw err;
if (!feed || !feed.length) {
var response = getContext().getResponse();
response.setBody('no docs found');
}
else {
var a = new Date();
var doc = feed[0];
doc.time = a;
collection.replaceDocument(doc._self,doc,function(err) {
if (err) throw err;
});
var response = getContext().getResponse();
response.setBody(JSON.stringify("update success"));
}
});
if (!isAccepted) throw new Error('The query was not accepted by the server.');
}
步骤2:创建c#azure函数TimeTrigger。
示例功能代码:
using System;
using Microsoft.Azure.Documents.Client;
public static void Run(TimerInfo myTimer, TraceWriter log)
{
private static DocumentClient client;
static string endpoint = "https://***.documents.azure.com:443/";
static string key = "***";
client = new DocumentClient(new Uri(endpoint), key);
StoredProcedureResponse<bool> sprocResponse = await client.ExecuteStoredProcedureAsync<bool>(
"/dbs/db/colls/coll/sprocs/updatetest/");
if (sprocResponse.Response) log.Info(sprocResponse.Response);
log.Info($"Cosmos DB is updated at: {DateTime.Now}");
}
步骤3:在azure-functions中添加文档数据库程序集引用。
您可以单击Azure功能&gt;查看文件&gt;添加名为'project.json'
的新文件(如果它不存在)。在此文件中写入以下代码,然后单击运行以安装包:
{
"frameworks": {
"net46":{
"dependencies": {
"Microsoft.Azure.DocumentDB": "1.20.1"
}
}
}
}
更多细节,您可以参考此doc。
希望它对你有所帮助。