将多值/数组GET参数传递给Azure Function并在CosmosDB中使用它

时间:2018-05-23 15:45:05

标签: azure azure-functions azure-cosmosdb

我有一个Azure函数(http触发),它返回来自CosmosDB(SQL API)的文档。

当我定义SQL QUERY时,CosmosDB已经集成并运行良好:

SELECT * FROM c where c.id = {documentID}

当我使用以下url触发http请求时,我将按照预期从数据库中获取ID为1的文档。

  

blub.azure.net/API/myFunc?documentID=1

现在我想在参数化SQL查询中使用多个ID。我应该如何用Azure做到这一点。通常情况下,我希望使用类似下面的URL和SQL Query来获得所需的结果,但它不起作用:

  

blub.azure.net/API/myFunc?documentIDs=1&documentIDs=2

     

SELECT * FROM c WHERE c.id IN({documentIDs})

注意:我知道我也可以传递一个json字符串并在函数中对其进行解码,但是cosmodb有超过1500万个条目,我无法将其传递给函数,过滤应该在sql上完成侧。所以我需要使用查询功能预先过滤它才能绑定到函数。

my function.json:

{
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req"
    },
    {
      "type": "http",
      "direction": "out",
      "name": "res"
    },
    {
      "type": "documentDB",
      "name": "lastDataPoints",
      "databaseName": "dp-db-04",
      "collectionName": "lastDataPointsCollection",
      "connection": "ldpdbconnectionstring",
      "direction": "in",
      "sqlQuery": "SELECT * FROM c WHERE c.id = {documentID}"
    }
  ],
  "disabled": false
}

1 个答案:

答案 0 :(得分:1)

无法添加数组参数。

“为了防止注入攻击,在发送到Document DB数据库之前,SqlQuery属性中使用的任何绑定字符串都将替换为SqlParameter”。从:

https://github.com/Azure/azure-webjobs-sdk-extensions/blob/4fabead81601aef32f87067dd7cb60bbf86681db/README.md#sql-query-support