2013-05-06 54 views
7

好吧,也许这对于StackOverflow来说太广泛了,但是有没有一种很好的通用方法来将关系表中的数据组装到分层JSON中?从关系数据库中提取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数据库?

+0

哈哈。哈。 Haaahaha ..好的一个:D SQL Server可以为XML输出*(作为供应商功能)执行这样的查询*,但是* SQL *中没有此任务的标准规定。使用适当的ORM /映射器可以使这样的*客户*(可能在Web服务?)转换更容易。 (我发现这个过程在C#/ LINQ中是“相对无痛的”,但有可能是专门为此映射设计的工具。) – user2246674 2013-05-06 20:14:14

+0

您的意思是一个文档集合,每个客户有一个文档,其中包含订单的数组,对吗? – Drew 2013-05-06 20:38:38

+1

只需将em转储到csv或json并使用mongoimport – Drew 2013-05-06 20:39:55

回答

-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/

+0

以下是以一种广义的方式管理SQL Server中的JSON(以及XML和关系数据)的一种不错方法:https://www.simple-talk.com/sql/ t-sql-programming/consume-json-strings-in-sql-server/ – rainabba 2013-10-26 00:39:12

0

我认为一个“广义”解决方案将是如下: -

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