单个嵌入文档中的Cosmos DB SQL查询

时间:2019-12-12 14:54:11

标签: database azure azure-sql-database azure-cosmosdb azure-cosmosdb-sqlapi

我正在使用Cosmos DB,我想编写一个SQL查询,该查询在单个嵌入文档中返回多个文档。

要详细说明,假设您在一个容器中有以下两种文档类型。订单文档的OrderId在OrderDetail文档中具有参考。

1.Order

{ 
    "OrderId": "31d4c08b-ee59-4ede-b801-3cacaea38808", 
    "Name": "ABC", 
    "Type": "Order", 
    "DeptName": "ABC", 
    "TotalAmount": 100.05 
} 

2.OrderDetail

{ 
    "OrderDetailId": "689bdc38-9849-4a11-b856-53f8628b76c9", 
    "OrderId": "31d4c08b-ee59-4ede-b801-3cacaea38808", 
    "Type": "OrderDetail", 
    "ItemNo": 202, 
    "Quantity": 10, 
    "UnitPrice": 10.05 
}, 

{ 
    "OrderDetailId": "789bdc38-9849-4a11-b856-53f8628b76c9", 
    "OrderId": "31d4c08b-ee59-4ede-b801-3cacaea38808", 
    "Type": "OrderDetail", 
    "ItemNo": 200, 
    "Quantity": 11, 
    "UnitPrice": 15.05 
} 

我想编写一个查询,该查询将基于引用OrderId =“ 31d4c08b-ee59-4ede-b801-3cacaea38808”在一个数组中返回OrderDetail的所有条目。

输出应如下所示

{
   "OrderId":"31d4c08b-ee59-4ede-b801-3cacaea38808",
   "Name":"ABC",
   "Type":"Order",
   "OrderDetail":[
      {
         "OrderDetailId":"689bdc38-9849-4a11-b856-53f8628b76c9",
         "Type":"OrderDetail",
         "ItemNo":202,
         "Quantity":10,
         "UnitPrice":10.05
      },
      {
         "OrderDetailId":"789bdc38-9849-4a11-b856-53f8628b76c9",
         "Type":"OrderDetail",
         "ItemNo":200,
         "Quantity":11,
         "UnitPrice":15.05
      }
   ]
}

我不知道如何在Cosmosdb中进行查询以获得上述结果。

1 个答案:

答案 0 :(得分:0)

您所需的输出应应用到关系数据库中,Cosmos db是非关系数据库,这不适合您的方案。据我所知,没有任何查询sql可以直接产生上述输出。

我建议您执行2条sql,其中一条会产生:

{"OrderId":"31d4c08b-ee59-4ede-b801-3cacaea38808",
   "Name":"ABC",
   "Type":"Order"}

另一个产生:

"OrderDetail":[
      {
         "OrderDetailId":"689bdc38-9849-4a11-b856-53f8628b76c9",
         "Type":"OrderDetail",
         "ItemNo":202,
         "Quantity":10,
         "UnitPrice":10.05
      },
      {
         "OrderDetailId":"789bdc38-9849-4a11-b856-53f8628b76c9",
         "Type":"OrderDetail",
         "ItemNo":200,
         "Quantity":11,
         "UnitPrice":15.05
      }
   ]

然后将它们合并。当然,您可以在Stored Procedure中进行这样的处理。