【问题标题】:Azure Function CosmosDB Trigger returned encoded data?Azure Function CosmosDB 触发器返回编码数据?
【发布时间】:2018-09-30 10:02:47
【问题描述】:

我编写了一个简短的 azure 函数来简单地从 CosmosDB 更改提要触发器中获取数据。

不过,它似乎返回某种形式的编码数据。

例如

{
    "_id" : ObjectId("5ad8db107dfa95101430ab94"),
    "id" : "task123",
    "type" : "genera123l",
    "information" : "some task"
}

如果上面的文档是在我的 cosmos db 中创建的,

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

上面的代码会打印出来

2018-04-19T19:28:23.899 [Info] Documents modified 1
2018-04-19T19:28:23.899 [Info] First document Id NWFkOGRiMTA3ZGZhOTUxMDE0MzBhYjk0

而不是

2018-04-19T19:28:23.899 [Info] Documents modified 1
2018-04-19T19:28:23.899 [Info] First document Id task123

这是预期的输出。 我在这里缺少某种配置吗?

看起来没有 CosmosDB 或 Azure Function App 的文档 解决这个问题:(

谢谢

【问题讨论】:

  • 似乎Id值来自'_id',而不是文档的'id'参数。 base64 中的解码为 _id 创建了正确的值。似乎它被读取为 ObjectId,

标签: azure azure-functions azure-cosmosdb


【解决方案1】:

我假设您使用 Azure CosmosDB MongoDb API 进行输入绑定。

请尝试使用 Azure CosmosDB SQL API。详细步骤可以参考这个guide。然后你就可以得到预期的答案。更多信息请参考这个link

如果您在 Cosmos DB 帐户上使用 MongoDB API

不要使用 Azure Cosmos DB 输入或输出绑定。 可能会损坏数据。

【讨论】:

    【解决方案2】:

    您正在使用 MongoDB API 帐户。您看到的是 JSON 中 BSON 文档的表示,这不是编码问题。

    Change Feed feature is read and accessed using the SQL SDK,这就是 BSON > JSON 转换的原因。

    虽然您可以在技术上使用来自 Functions 的更改提要、使用更改提要 SDK 或以编程方式将 SQL SDK 与任何 Cosmos DB API 帐户一起使用,但如果您在 Mongo 帐户中使用二进制属性,它们将被转换为 JSON。

    【讨论】:

      猜你喜欢
      • 2020-07-07
      • 1970-01-01
      • 2019-11-07
      • 2020-02-27
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多