Cosmos DB-根据子数据选择根文档

时间:2019-03-04 13:45:54

标签: azure-cosmosdb azure-cosmosdb-sqlapi

很抱歉,如果这是一个新手问题,但我是Cosmos DB的新手。

我正在尝试从集合中选择所有子文档符合指定(多个)条件的根文档。

让我们假设您有一个ORDER文档,该文档具有ORDERITEMS作为子数据文档,我需要做的是查询已订购特定产品的所有订单,并返回整个订单文档。

[
    {
        "order": {
            "id": "1",
            "orderiems": [
                {
                    "partcode": "A",
                    "qty": "4"
                },
                {
                    "partcode": "B",
                    "qty": "4"
                },
                {
                    "partcode": "C",
                    "qty": "4"
                }
            ]
        }
    },
    {
        "order": {
            "id": "2",
            "orderiems": [
                {
                    "partcode": "A",
                    "qty": "4"
                },
                {
                    "partcode": "B",
                    "qty": "4"
                },
                {
                    "partcode": "A",
                    "qty": "4"
                }
            ]
        }
    },
    {
        "order": {
            "id": "3",
            "orderiems": [
                {
                    "partcode": "A",
                    "qty": "1"
                }
            ]
        }
    }
]

我的查询是

SELECT order from order
JOIN items in order.orderitem
WHERE item.partcode = '<mypartcode>
  AND item.qty > 1

现在,这种方式可以将订单退还给我,但它正在退回

  • id:1
  • id:2
  • id:2 << 重复

因为id: 2有两个相同的项目。...id: 3被排除,因为它只有一个项目

在普通的SQL Server SQL中,我只会拥有

SELECT *
  from Orders o 
 where exists (select 1 
                 from OrderItems oi 
                where oi.ordID = o.ID 
                  and oi.partcode = 'A'
                  and oi.qty > 1)

请问如何停止复制

请注意,以上是手工制作的表示形式,用于简化问题,因为我实际上正在处理的文档模型非常大

1 个答案:

答案 0 :(得分:1)

Cosmos DB现在支持DISTINCT关键字,它实际上可用于您的文档用例。