Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Azure Cosmos DB中“合并”或“转换”JSON文档_Json_Database_Azure_Botframework_Azure Cosmosdb - Fatal编程技术网

如何在Azure Cosmos DB中“合并”或“转换”JSON文档

如何在Azure Cosmos DB中“合并”或“转换”JSON文档,json,database,azure,botframework,azure-cosmosdb,Json,Database,Azure,Botframework,Azure Cosmosdb,我正在使用Microsoft Bot框架和Azure设置聊天机器人。我想将UserState保存在数据库中,以便轻松分析用户数据。我设法在Azure Cosmos DB中以JSON文档的形式保存了我的userState 问题是每次与bot的交互都会在cosmosdb的集合中创建一个新文档 我怎样才能轻松地合并数据?数据结构是一致的,并且在最好的情况下将数据放在某种表中?我想用于分析的工具需要.txt或.csv文件 这是存储用户数据的JSON文件的一个片段 { "id": "emulato

我正在使用Microsoft Bot框架和Azure设置聊天机器人。我想将UserState保存在数据库中,以便轻松分析用户数据。我设法在Azure Cosmos DB中以JSON文档的形式保存了我的userState

问题是每次与bot的交互都会在cosmosdb的集合中创建一个新文档

我怎样才能轻松地合并数据?数据结构是一致的,并且在最好的情况下将数据放在某种表中?我想用于分析的工具需要.txt或.csv文件

这是存储用户数据的JSON文件的一个片段

{
    "id": "emulator*2fusers*2f9321b527-4699-4b4a-8d9d-9cd9fa8f1967*2f",
    "realId": "emulator/users/9321b527-4699-4b4a-8d9d-9cd9fa8f1967/",
    "document": {
        "userData": {
            "name": "value",
            "age": 18,
            "gender": "value",
            "education": "value",
            "major": "value"
        },
        "userDataExtended": {
            "roundCounter": 3,
            "choices": [
                "A",
                "A",
                "B"
            ],
        },
    "_rid": "0k5YAPBrVaknAAAAAAAAAA==",
    "_self": "dbs/0k5YAA==/colls/0k5YAPBrVak=/docs/0k5YAPBrVaknAAAAAAAAAA==/",
    "_etag": "\"ac009377-0000-0000-0000-5c59c5610000\"",
    "_attachments": "attachments/",
    "_ts": 1549387105
}
在最好的情况下,我希望将数据放在具有列名称、年龄等的表结构中,并将每个用户文档作为一行

谢谢大家!

在最好的情况下,我希望将数据放在具有 列名称、年龄等,并将每个用户文档作为一行

显然,您需要使用一些其他服务来实现此需求,因为bot服务收集的数据已经存在

在我看来,也许这是一个很好的选择。当任何更新流入您的cosmos db集合时,将触发该功能


当然,您可以从中得到更多的解释,然后我想说的是,您可以配置,也许还可以配置一个特定的csv文件。在函数中,您可以使用cosmos db sdk获取所需的列,并将它们组装成您想要的任何格式。

您的问题中有一些内容,我将分别介绍它们

扩展Drew的评论: 您正在创建多个文档,因为您正在通过emulator运行bot。每次emulator重新启动时,它都会创建一个新的用户ID,从而为用户创建一个新文档,也为该用户的对话创建一个新文档。如果使用emulator以外的通道,并且用户ID保持一致,则不会出现此问题

关于合并文件: 我不确定你到底在寻找什么,但你也许可以用它来完成你所需要的。只需单击新建SQL查询。例如,运行SELECT*FROM c将所有文档合并到单个输出中

关于文本/csv文件: 我不确定你的工具是什么,但如果它可以处理JSON,那么上面的方法可能适合你。如果没有,您可以实现定制中间件,以获得所需的txt/csv输出。这显示了一些相对相似的东西。在C语言中没有一个等价的例子,但是你仍然可以做同样的事情

关于表格: 如果您真的在寻找表存储,那么在V4中,Bot将被blob存储所取代。你可以在V3中编写你的机器人。与Jay所说的类似,您可能仍然能够使用触发器函数将其发送到表存储,但随后您将数据存储两次

关于分析
如果您真正想要的只是分析,那么这可能就是您需要的,尽管我不相信它会提供您想要的详细信息。

它根本不应该这样做。它应该使用与频道和会话或用户的标识符相关联的文档的一致id来跨回合存储状态。您的屏幕截图显示的信息不足。我需要查看多个文档。您可以将一些文档复制/粘贴到公共Gist中,以便我可以查看它们吗?在我的生产环境中,多个文档也会有不同的用户ID来标识每个用户。但是,通过SQL查询进行的文档合并工作得很好,这正是我想要的。很抱歉,我真的没有经验。CSV/表格我找到了一个可以轻松地将单个输出转换成我想要的行和列的方法。因此,主题可以关闭。非常感谢@mdrichardson,您好,看来“这是一个样本”的链接已经不存在了,您能提供另一个样本链接吗?关于text/csv文件,您是否建议我们首先将其转换为JSON数据/文件,然后发送到cosmos db进行处理?非常感谢你的帮助@FRANZKAFKA,您好,您能通过SQL查询共享您的合并吗?您提供的工具看起来像是将Json文件转换为csv,我们是否可以直接将Json数据发送到cosmos db并使用SQL查询来处理合并?谢谢大家!@KevDing我们不再有那个样本了,但我更新了Git回购历史中样本的链接。现在应该可以工作了。对于text/csv,您不需要转换它们;Bot Framework SDK将所有Bottate保存为Cosmos中的JSON。@mdrichardson MSFT,非常感谢您共享此链接!不幸的是,我在阅读node.js代码时遇到了一些问题,您是否有使用C中的.Net内核的类似项目?或者我可以参考或使用的任何API/Nuget包?