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

Azure IoTHub Functions Cosmos DB (js)

宰父俊民
2023-03-14

我向Azure IoTHub发送数据。然后由IoTHub EventHub函数检索和处理此数据。

此函数检索数据并将数据插入Azure Cosmos数据库。

在 IoTHub 事件中心函数中,必须先声明 Cosmos 数据库和 Cosmos 集合,然后才能运行该函数。

问题是我想使用动态集合名称。此名称取决于发送到 IoTHub 的数据。这可能吗?是否可以在函数运行时声明集合名称?

使用下面的脚本,可以向一个集合发送

function.json:

{
  "bindings": [
    {
      "type": "eventHubTrigger",
      "name": "IoTHubMessages",
      "direction": "in",
      "path": "poc_funceventhubname",
      "connection": "POCIoTHub_events_IOTHUB",
      "cardinality": "many",
      "consumerGroup": "functions"
    },
    {
      "type": "documentDB",
      "name": "outputDocument",
      "databaseName": "VALUES",
      "collectionName": "POCVALUES",
      "createIfNotExists": true,
      "connection": "pocCosmos_DOCUMENTDB",
      "direction": "out"
    }
  ],
  "disabled": false
}

index.js:

module.exports = function (context, IoTHubMessages) {
    var v;
    var output = [];
    IoTHubMessages.forEach(message => {
        v = message.v;
        context.log(`v = ${v}`);
        for(var i = 0; i < message.REGS.length; i++) {
            var obj = message.REGS[i];
            output[i] = {
                    "vi": v,
                    "pi": obj[0],
                    "ts": obj[2],
                    "vl": obj[1]
                };
            context.bindings.outputDocument = output;
        }
    });

    context.done(); 

};

夏季:

我想使用变量collectionName,它将在index.js中声明?

如何在defunction.json中声明集合名称,我可以在deindex.js?中声明这个变量

共有2个答案

谷弘致
2023-03-14

当我记录上下文时:

(context.log(`Bindingdata = ${JSON.stringify(context.bindingData)}`))

我得到以下信息:

{
    "partitionContext": {
        "eventHubPath": "tdppoc1iothub",
        "consumerGroupName": "functions"
    },
    "partitionKeyArray": [
        null,
        null
    ],
    "offsetArray": [
        "17206545352",
        "17206546560"
    ],
    "sequenceNumberArray": [
        296710,
        296711
    ],
    "enqueuedTimeUtcArray": [
        "2018-05-23T11:28:59.271Z",
        "2018-05-23T11:29:01.317Z"
    ],
    "propertiesArray": [
        {},
        {}
    ],
    "systemPropertiesArray": [
        {
            "iothub-connection-device-id": "tdppoc1device1",
            "iothub-connection-auth-method": "{\"scope\":\"device\",\"type\":\"sas\",\"issuer\":\"iothub\",\"acceptingIpFilterRule\":null}",
            "iothub-connection-auth-generation-id": "********",
            "iothub-enqueuedtime": "2018-05-23T11:28:59.015Z",
            "iothub-message-source": "Telemetry",
            "x-opt-sequence-number": 296710,
            "x-opt-offset": "17206545352",
            "x-opt-enqueued-time": "2018-05-23T11:28:59.271Z",
            "enqueuedTimeUtc": "2018-05-23T11:28:59.271Z",
            "sequenceNumber": 296710,
            "offset": "17206545352"
        },
        {
            "iothub-connection-device-id": "tdppoc1device1",
            "iothub-connection-auth-method": "{\"scope\":\"device\",\"type\":\"sas\",\"issuer\":\"iothub\",\"acceptingIpFilterRule\":null}",
            "iothub-connection-auth-generation-id": "********",
            "iothub-enqueuedtime": "2018-05-23T11:29:01.015Z",
            "iothub-message-source": "Telemetry",
            "x-opt-sequence-number": 296711,
            "x-opt-offset": "17206546560",
            "x-opt-enqueued-time": "2018-05-23T11:29:01.317Z",
            "enqueuedTimeUtc": "2018-05-23T11:29:01.317Z",
            "sequenceNumber": 296711,
            "offset": "17206546560"
        }
    ],
    "sys": {
        "methodName": "IoTHubJS_EventHubPOC",
        "utcNow": "2018-05-23T11:29:01.610Z"
    },
    "invocationId": "ea783bf0-3354-4bb9-bba5-e4273760c14a"
}
程树
2023-03-14

您可以通过使用<code>Binder

Node.js函数也有一个跟踪项来实现这一点,但是它太老了,没有任何进展。

 类似资料:
  • 问题内容: 我正在尝试使用GET方法发送一个json对象。我的代码: 但是,收到的标头将“ Content-Length”设置为零,因此服务器上的json解析器无法读取内容。 我已经尝试设置内容长度标头,但是它仍然以零的形式出现在服务器上: 任何想法如何使它工作?它必须是GET请求。 问题答案: GET请求至少通常是没有消息正文。如文档中所述,jQuery将GET请求追加到url参数。您应该能够使

  • 问题内容: 在JSF2中,是否可以使用Ajax请求动态更改ui:include的src值(例如PrimeFacesp:commandButton)?谢谢。 那就是我现在所拥有的。是否有可能使它成为Ajax(使用p:commandButton)? 问题答案: 另一个答案中提出的JSTL标签不是必需的,并且不能很好地重用。 这是一个使用纯JSF的基本示例(假设您运行Servlet 3.0 / EL 2

  • 问题内容: 我有一个基于jquery的单页webapp。它通过AJAX调用与RESTful Web服务进行通信。 我正在尝试完成以下任务: 将包含JSON数据的POST提交到REST URL。 如果请求指定JSON响应,则返回JSON。 如果请求指定PDF / XLS / etc响应,则返回可下载的二进制文件。 我现在有1&2,并且客户端jquery应用通过基于JSON数据创建DOM元素在网页上显

  • 本文向大家介绍jQuery中如何将数组转化为json字符串,然后再转化回来?相关面试题,主要包含被问及jQuery中如何将数组转化为json字符串,然后再转化回来?时的应答技巧和注意事项,需要的朋友参考一下

  • 问题内容: 我希望能够从Java操作方法中的JSON字符串访问属性。只需说一下即可使用该字符串。下面是该字符串的示例: 在此字符串中,每个JSON对象都包含其他JSON对象的数组。目的是提取ID列表,其中任何给定对象都具有包含其他JSON对象的group属性。我将Google的Gson视为潜在的JSON插件。谁能提供某种形式的指导,说明如何从此JSON字符串生成Java? 问题答案: 我将Goog

  • 问题内容: 我在文件中有此: 我编写了以下脚本来打印所有数据: 但是,该程序会引发异常: 如何解析并提取其值? 问题答案: 你的数据不是有效的格式。你有什么时候应该拥有: 用于JSON数组,在Python中称为 用于JSON对象,在Python中称为 JSON文件的外观如下: 然后,你可以使用你的代码: 有了数据,你现在还可以找到类似的值: 试试看,看看是否有意义。

  • 问题内容: 我正在使用休眠将对象映射到数据库。客户端(iOS应用程序)向我发送了JSON格式的特定对象,我使用以下实用程序方法将其转换为真实的表示形式 但是问题是,在我的pogo中,我将值存储为byte [],如下所示(因为这是存储在数据库中的内容-blob) 当然,现在转换失败了,因为它无法在byte []和String之间进行转换。 这是更改构造函数以接受String而不是字节数组,然后在设置

  • 问题内容: 我很难找到最简单的方法来针对给定的JSON模式字符串验证JSON字符串(作为参考,这是在Java中运行在Android应用程序中)。 理想情况下,我只想传入JSON字符串和JSON模式字符串,并且它返回关于是否通过验证的布尔值。通过搜索,我发现了以下两个有前途的库可以完成此任务: http://jsontools.berlios.de/ https://github.com/fge/j