我在尝试将OFFSET
和LIMIT
的值作为查询参数动态传递给CosmosDB触发器时遇到了一个问题。
如果我将这两个值硬编码到查询中,它将按预期工作。
但是,使用此代码:
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"route": "v1/query/properties",
"methods": [
"post"
]
},
{
"name": "propertiesInquiryInput",
"type": "cosmosDB",
"databaseName": "property",
"collectionName": "discovery",
"connectionStringSetting": "CosmosDBConnectionString",
"direction": "in",
"leaseCollectionName": "leases",
"sqlQuery": "SELECT * FROM c WHERE c.country={country} OFFSET {pageNo} LIMIT {perPage}"
},
执行时出现以下故障:
System.Private.CoreLib: Exception while executing function: Functions.queryProperties. Microsoft.Azure.DocumentDB.Core: Message: {"errors":[{"severity":"Error","location":
{"start":48,"end":55},"code":"SC2062","message":"The OFFSET count value exceeds the maximum allowed value."},
{"severity":"Error","location":{"start":62,"end":70},"code":"SC2061","message":"The LIMIT count value exceeds the maximum allowed value."}]}
我对Azure服务及其模式相对较新,所以可能我错过了一些明显的东西。我尝试通过POST将这些值作为JSON对象发送,并通过GET请求作为查询参数发送。似乎没有任何效果。
我也不知道有什么方法可以查看SQL查询被触发的内容,所以也许可以从这个Angular 调试它。
更新:
为清晰起见,添加函数体:
module.exports = async function (context, req) {
const results = context.bindings.propertiesInquiryInput;
!results.length && context.done(null, { status: 404, body: "[]", });
const body = JSON.stringify(results.map(data => reshapeResponse(data));
return context.done(null, { status: 200, body });
}
2条答案
按热度按时间nvbavucw1#
使用python的参数化查询和
azure.cosmos=4.2.0
pypi包得到了相同的异常消息。重现病例:
解决方法(使用格式化字符串进行查询):
省略了
WHERE
语句中不相关的参数,用于示例目的。可能对正在处理类似情况的人有帮助。6vl6ewon2#
这有点晚,但我有同样的问题,在我的情况下,这个错误是因为我作为offet传递的值是一个String。在我将其解析为Int之后,查询就像预期的那样工作了!