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

将多值/数组GET参数传递给Azure函数并在CosmosDB中使用,azure,azure-functions,azure-cosmosdb,Azure,Azure Functions,Azure Cosmosdb,我有一个Azure函数(http触发),它从CosmosDB(SQL API)返回文档 CosmosDB已经集成,在我定义SQL查询时工作良好,如: SELECT * FROM c where c.id = {documentID} 当我使用下面的url触发http请求时,我将从数据库中获得ID为1的文档,正如预期的那样 blub.azure.net/API/myFunc?documentID=1 现在我想在参数化SQL查询中使用多个ID。我该如何使用Azure来实现这一点。通常,我希望使用以

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

CosmosDB已经集成,在我定义SQL查询时工作良好,如:

SELECT * FROM c where c.id = {documentID}
当我使用下面的url触发http请求时,我将从数据库中获得ID为1的文档,正如预期的那样

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

现在我想在参数化SQL查询中使用多个ID。我该如何使用Azure来实现这一点。通常,我希望使用以下URL和SQL查询之类的方法来获得所需的结果,但它不起作用:

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

从c中选择*其中c.id位于({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
}

无法添加数组参数

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


这是您必须在Azure功能中实现的功能。您的问题不是很具体,但如果问题真的是“如何使用多个ID获取多个文档”,我知道有两种方法。我推荐第一种。不按此处定义读取/获取:2。执行带有逻辑OR的查询:感谢您的意见。Azure函数允许您直接将cosmosDB集合集成到函数中。然后将数据作为变量直接绑定到上下文中。您可以在集成的cosmosDB集合的SQL查询中使用http查询参数。我在问题中描述了它是如何工作的。您的解决方案可以工作,但由于额外的http请求,会有巨大的延迟。当SQL可以直接寻址时,为什么要使用嵌套http请求。谢谢,但我想知道为什么?因为在DocumentDB中通常支持数组作为参数化sql参数:“参数值可以是任何有效的JSON(字符串、数字、布尔值、null、甚至数组或嵌套JSON)”,这是从中得到的。我知道在t-sql中有类似于inarray(field,@qrray)的东西,但在azure函数/documentDB组合中实现数组似乎“复杂”