我尝试从逻辑应用程序调用 CosmosDB 中的存储过程并使用一些参数,以便能够检索满足查询要求的文档数量。
我想做的查询示例:
SELECT * FROM c where c.Time_Stamp BETWEEN time1 AND time2
我尝试在数据资源管理器中测试我的存储过程。这就是我正在做的事情。
// SAMPLE STORED PROCEDURE
function sample(input) {
var context = getContext();
var collection = getContext().getCollection();
var response = context.getResponse();
//var inputtf = JSON.parse(input).id;
var filterQuery = "SELECT * FROM c where c.id = "+ input ;
console.log(filterQuery);
// Query documents and take 1st item.
var isAccepted = collection.queryDocuments(
collection.getSelfLink(),
filterQuery,
function (err, feed, options) {
if (err) throw err;
response.setBody(JSON.stringify(feed));
});
if (!isAccepted) throw new Error('The query was not accepted by the server.');
}
作为我给出的输入:
我得到了这个结果:
SELECT * FROM c where c.id = 220
所以我可以看到我的查询能够获取其中的参数。
问题是我没有得到该查询的结果(结果是“[]”)
这是我要查询的文档:
这将是我首先发送到存储过程的有效负载类型。下一步是添加 UTC 格式的开始时间和结束时间参数。
作为最终目标,我想在逻辑应用程序的输出中获得满足查询要求的文档数量。
如果我没记错的话,执行存储过程活动的分区键参数应该作为字符串发送。因此,您需要在分区键值之间添加引号。
在您的情况下:“42976”而不是 42976
存储过程需要有效的分区键值才能执行并响应查询。您可以在 Microsoft 文档的本页顶部看到一条注释:https://learn.microsoft.com/en-us/azure/cosmos-db/sql/how-to-write-stored-procedures-triggers- udfs?tabs=javascript