sqlQuery со строкой запроса в функциях Azure 2.x?
У меня есть приложение в функции 1.x, которое получает objId из строк запроса, запрашивает CosmosDb (привязка ввода), а затем выполняет остальную часть работы. Тем не менее, я перевожу его в v2, и он не работает, как раньше: он запрашивает db, только если objId указан в шаблоне маршрута, но не если objId предоставляется в виде строки запроса (в v1 он работает даже если это предоставлено как строка запроса). Хотя моя функция.json почти такая же. Можете ли вы сказать мне, что не так и как я могу сделать эту входную привязку для выполнения запроса SQL с помощью строки запроса?
Ниже приводится содержание моего function.json:
{
"bindings": [
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "req"
},
{
"type": "http",
"direction": "out",
"name": "res"
},
{
"type": "cosmosDB",
"name": "obj",
"databaseName": "mydb",
"collectionName": "objects",
"sqlQuery": "SELECT * FROM c where c.id = {objId}",
"connectionStringSetting": "mydbstring",
"direction": "in"
}
],
"disabled": false
}
И следующий мой код функции
const client = new CosmosClient({
endpoint: endpoint,
auth: {
masterKey: masterKey
}
});
module.exports = async function (context, req, obj) {
}
И следующее содержание моего прокси.json:
{
"$schema": "http://json.schemastore.org/proxies",
"proxies": {
"Set Object state Id Proxy": {
"matchCondition": {
"route": "/obj/{objId}/state",
"methods": [
"GET"
]
},
"backendUri": "http://localhost:7071/api/setobjstate?objId={objId}"
}
}
Это работает так:
http://localhost:7071/games/bbbbb
Но как я могу заставить это работать таким образом?
http://localhost:7071/games?objId=bbbbbbbbb
1 ответ
Что касается документов, кажется, что значения запроса, в отличие от данных маршрута, не могут быть переданы в запрос sql.
https://docs.microsoft.com/en-in/azure/azure-functions/functions-bindings-cosmosdb-v2
Из приведенной выше ссылки: "HTTP-триггер, найдите идентификатор из данных маршрута, используя SqlQuery (C#). В следующем примере показана функция C#, которая извлекает один документ. Функция запускается HTTP-запросом, который использует данные маршрута для указания идентификатора. искать. Этот идентификатор используется для извлечения документа ToDoItem из указанной базы данных и коллекции
В примере показано, как использовать выражение привязки в параметре SqlQuery. Вы можете передать данные маршрута параметру SqlQuery, как показано, но в настоящее время вы не можете передать значения строки запроса. "
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
Однако если вам нужно только получить документ по Id, вы можете, кажется, в вашем файле function.json заменить "sqlQuery": "SELECT * FROM c, где c.id = {objId}" на "Id": "{Query. Я бы}"