12

好的,也许这对于 StackOverflow 来说太宽泛了,但是有没有一种好的、通用的方法可以将关系表中的数据组装成分层 JSON?

例如,假设我们有一个“customers”表和一个“orders”表。我希望输出看起来像这样:

{
    "customers": [
        {
            "customerId": 123,
            "name": "Bob",
            "orders": [
                {
                    "orderId": 456,
                    "product": "chair",
                    "price": 100
                },
                {
                    "orderId": 789,
                    "product": "desk",
                    "price": 200
                }
            ]
        },
        {
            "customerId": 999,
            "name": "Fred",
            "orders": []
        }
    ]
}    

我宁愿不必编写大量程序代码来循环遍历主表并一次获取几个订单并附加它们。它会非常缓慢。

我使用的数据库是 MS SQL Server,但我很快需要对 MySQL 做同样的事情。我正在使用 Java 和 JDBC 进行访问。如果这些数据库中的任何一个都有某种神奇的方式来在服务器端组装这些记录,那将是理想的。

人们如何从关系数据库迁移到像 MongoDB 这样的 JSON 数据库?

4

5 回答 5

1

这是一组有用的函数,用于将关系数据转换为 JSON 和 XML,以及从 JSON 返回表:https ://www.simple-talk.com/sql/t-sql-programming/sumption-json-strings-in- sql服务器/

于 2013-10-26T00:39:47.887 回答
1

SQL Server 2016 终于赶上并增加了对 JSON 的支持。

JSON 支持仍然不匹配其他产品,例如 PostgreSQL,例如不包括 JSON 特定的数据类型。但是,添加了几个有用的 T-SQL 语言元素,使使用 JSON 变得轻而易举。

例如,在以下 Transact-SQL 代码中,定义了一个包含 JSON 字符串的文本变量:

DECLARE @json NVARCHAR(4000)
SET @json = 
N'{
    "info":{  
      "type":1,

      "address":{  
        "town":"Bristol",
        "county":"Avon",
        "country":"England"
      },
      "tags":["Sport", "Water polo"]
   },
   "type":"Basic"
}'

然后,您可以使用JSON_VALUEandJSON_QUERY函数从 JSON 文本中提取值和对象:

SELECT
  JSON_VALUE(@json, '$.type') as type,
  JSON_VALUE(@json, '$.info.address.town') as town,
  JSON_QUERY(@json, '$.info.tags') as tags

此外,该OPENJSON函数允许从引用的 JSON 数组返回元素:

SELECT value
FROM OPENJSON(@json, '$.info.tags')

最后但同样重要的是,有一个FOR JSON子句可以将 SQL 结果集格式化为 JSON 文本:

SELECT object_id, name
FROM sys.tables
FOR JSON PATH

一些参考资料:

于 2018-03-28T22:51:27.110 回答
0

SQL Server 2016 现在支持读取 JSON,其方式与多年来支持 XML 的方式大致相同。使用 OPENJSON 直接查询和 JSON 数据类型存储。

于 2018-03-28T21:44:47.687 回答
0

我认为一个“通用”解决方案如下:-

  1. 创建一个“选择”查询,它将连接所有必需的表以获取二维数组中的结果(如 CSV/临时表等
  2. 如果此连接的每一行都是唯一的,并且 MongoDB 模式和列具有一对一的映射,那么它就是使用带有所需参数的 MongoImport 命令导入此 CSV/表。
  3. 但是像上面这样的情况,给定的客户 ID 可以有一个'orders' 数组,需要在 mongoImport 之前进行一些计算。
    您必须编写一个程序,该程序可以“垂直合并”给定客户 ID 的订单。对于少量数据,一个简单的 java 程序就可以工作。但是对于更大的集合,使用 spark 的并行编程可以完成这项工作。
于 2016-04-25T04:33:51.097 回答
-1

没有通用的方法,因为 SQL Server 不支持 JSON 作为其数据类型。为此,您必须创建自己的“通用方式”。

看看这篇文章。那里有关于如何将 sql server 数据操作为 JSON 格式的很好的例子。

https://www.simple-talk.com/blogs/2013/03/26/sql-server-json-to-table-and-table-to-json/

于 2013-05-07T09:27:33.553 回答