当前位置: 首页 > 知识库问答 >
问题:

Azure函数-Cosmos db输入绑定查询不工作

松嘉运
2023-03-14

我正在尝试使用服务总线队列触发器来触发azure函数,它工作得很好。我还想做的是在同一个函数上使用Cosmos Db输入绑定。该函数由特定文档触发,并通过输入绑定获得结果,以便进行简单的查询,如:

Select * from c
Select * from c WHERE c.contractId = {contractId}
#r "Microsoft.Azure.DocumentDB.Core"
using System;
using System.Collections.Generic;
using Microsoft.Azure.Documents;

public static void Run(IReadOnlyList<Document> input, ILogger log, IEnumerable<dynamic> documents)
{
    if (input != null && input.Count > 0)
    {
        log.LogInformation("Documents modified " + input.Count);
        log.LogInformation("First document Id " + input[0]);
    }
}

function.json

 {
  "bindings": [
    {
      "name": "myQueueItem",
      "type": "serviceBusTrigger",
      "direction": "in",
      "queueName": "tripend",
      "connection": "mobiiot_RootManageSharedAccessKey_SERVICEBUS"
    },
    {
      "type": "cosmosDB",
      "name": "documents",
      "databaseName": "ToDoList",
      "collectionName": "Items",
      "connectionStringSetting": "mobiiot_DOCUMENTDB",
      "direction": "in",
      "sqlQuery": "SELECT * from c where c.contractId= {contractId}"
    }
  ]
}

进入Azure函数的触发器数据:

    {"vin":"WP0ZZZ99ZJS167001","milage":780.3333,"contractId":"19277",
"lat":51.47404,"lon":-0.45299000000000006,"noOfHardBreaks":0,"fuelConsumptionRate":22,
"speed":96,"status":"droppedOff","EventProcessedUtcTime":"2018-12-10T09:14:51.6474889Z",
"PartitionId":0,"EventEnqueuedUtcTime":"2018-12-10T09:14:51.5350000Z",
"IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"WP0ZZZ99ZJS167001",
"ConnectionDeviceGenerationId":"636795108399273130",
"EnqueuedTime":"2018-12-10T09:14:51.5470000Z","StreamId":null}}

共有1个答案

冯宏放
2023-03-14

您的代码似乎与function.json不匹配。要设置像{contractId}这样的占位符,我们需要定义一个自定义类型来反序列化JSON,这样函数代码就可以在来临时的数据中找到contractId

试一下下面的代码。

#r "Microsoft.Azure.DocumentDB.Core"
using System;
using System.Collections.Generic;
using Microsoft.Azure.Documents;

public static void  Run(QueueItem myQueueItem, ILogger log, IEnumerable<dynamic> documents)
{      
    foreach(var doc in documents)
    {
        log.LogInformation((string)doc.id);
    }
}
public class QueueItem
{
    public string contractId { get; set; }
}
 类似资料:
  • 我在CosmosDB中有两个集合,和。 集合保存所有历史价格,并不断更新。 我想创建一个Azure函数,它监听< code>StockPrices更新(< code>CosmosDBTrigger),然后对触发器传递的每个< code >文档执行以下操作: 在集合中查找具有匹配代码的股票 在集合中更新股票价格 我不能用<code>CosmosDB(绑定仅在触发器传递单个项时有效)。 我看到它工作的

  • 我对Azure函数和CosmosDB输出绑定有问题。我现在拥有的是:我从一个Cosmos DB容器中读取数据,处理一些东西,然后将结果输出回同一个DB但不同的容器。我正在使用VSCode和python,并测试了其他输出(blob、HTTP响应等),所有这些都正常工作,所以我认为这是CosmosDB的问题。 主要功能定义如下: function.json输出绑定如下: 请注意,我使用和我的扩展手动安

  • 我制作了一个Azure函数(http触发器),并使用Visual Studio 2019将其部署在门户中。 该函数工作正常,我现在将添加一个绑定到我的CosmosDB。我导航到我的函数,然后单击“集成”。现在我看到了触发器、函数以及输入和输出绑定。 我应该可以在这里添加一个新的输入绑定。但我没有“添加”按钮。我做错了什么?

  • 在app服务中有一个learn_DOCUMENTDB配置设置,它具有到cosmos db实例的有效连接字符串(是自动创建的)。 错误日志条目表示: 无法将CosmosDB绑定到类型“System.String”。可能的原因:1)试图绑定到“Microsoft.Azure.Documents.Client.DocumentClient,Microsoft.Azure.DocumentDB.Core,

  • 在Azure Functions中,我可以轻松地创建到Cosmos DB Connection的输入绑定,并指定SqlQuery,以便在每次调用时将一些数据传递到我的函数中,如下所述:https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-cosmosdb#input---example-2 我想知道这个查

  • 我对Typescript和CosmosDB是新手,这可能是一个相当愚蠢的问题,然而,我在网上搜索了一整天,也找不到适合我的解决方案。希望有人愿意帮忙。 select似乎不是typescript中定义的函数,有人能帮忙吗?