【发布时间】:2020-09-24 06:28:25
【问题描述】:
我有以下格式的 Cosmos 文档:
(注意:示例仅作说明,实际文档有不同的属性)
{
"OrderNumer":"12345",
"Version":"5",
"OrderDetails": [
{
"id":1,
"OrderItem": {
"Name": "ABC",
"Description": "ABC Description",
.
.
.
},
"PaymentDetails": {
},
.
.
.
},
{
"id":2,
"OrderItem": {
"Name": "PQR",
"Description": "PQR Description",
.
.
.
},
"PaymentDetails": {
},
.
.
.
},
],
"OrderDate": "12-01-2020",
"CustomerDetails": {
}
.
.
.
}
OrderNumber 是一个分区键。
我正在尝试通过 Cosmos Query 投影上述文档,以获取整个 OrderDetails JSON 对象和来自父级的一些属性到单个 JSON 中,并在 OrderDetails-> id 上进行过滤。
预期的投影应该是:
{
"Order":
[
{
"OrderNumer":"12345",
"Version":"5",
"id":1,
"OrderItem": {
"Name": "ABC",
"Description": "ABC Description",
.
.
.
},
"PaymentDetails": {
},
.
.
.
},
{
"OrderNumer":"12345",
"Version":"5",
"id":2,
"OrderItem": {
"Name": "PQR",
"Description": "PQR Description",
.
.
.
},
"PaymentDetails": {
},
.
.
.
},
]
}
如上面的 JSON 所示,我将OrderDetails 中的OrderNumber 和Version 属性投影为Order。
OrderDetails 是一个具有动态模式的大型 JSON,这使得我们很难单独投影其属性。
我已经尝试了几个选项来预测这个,但我能达到的最接近的是下面的查询:
SELECT c.OrderNumber, c.Version, o as Order
FROM c
JOIN o in c.OrderDetails WHERE
c.OrderNumber= '1235' AND ARRAY_CONTAINS([1,2], o.id)
但是,上面的查询没有给出想要的结果,因为它将OrderNumber 和Version 作为单独的属性保留在Order 中。
有什么方法可以实现吗?
【问题讨论】:
-
请编辑您的问题并包含您目前编写的查询并告诉我们您遇到的问题。
-
试试这个 sql:
SELECT c.OrderNumer,c.Version,o.OrderItem,o.PaymentDetails FROM c join o in c.OrderDetails然后new JsonObject通过代码添加这个结果。 -
你试过@SteveZhao 发布的查询吗?有效果吗?
-
查询错过了我的一个要求,我需要来自
OrderDetails的所有属性,OrderDetails有一个巨大的动态数据集。所以我更喜欢全选。希望这可以澄清
标签: azure-cosmosdb azure-cosmosdb-sqlapi