首页 > 解决方案 > 如何在数据资源管理器中查询嵌套数组?

问题描述

我正在尝试在 Cosmos DB 上的 Data Explorer 中编写一个查询,以向我提供订单已应用折扣的结果列表。这要求我检查 Totals 数组的每个元素以查找不为空的 Discounts 元素。

我尝试在 ARRAY_CONTAINS 中使用 ARRAY_LENGTH ,如下所示,但没有返回结果集。我知道 ARRAY_CONTAINS 用于在数组中查找字段值,但我希望它会接受 ARRAY_LENGTH 命令。

SELECT * FROM c where ARRAY_CONTAINS(c.OrderHeader.Totals,{ARRAY_LENGTH(Discounts):1},true))

我还尝试使用以下查询检查 Discounts 数组的 CampaignId 字段中的值。它没有返回结果集。

SELECT * FROM c where ARRAY_CONTAINS(c.OrderHeader.Totals.Discounts,{CampaignId:null},false)

我认为有办法做到这一点,所以任何输入将不胜感激!

{
    "OrderHeader": {

        "Totals": [
            {
                "Currency": "CAD",
                "Price": 10.00,
                "Discounts": []
            },
            {
                "Currency": "CAD",
                "Price": 20.00,
                "Discounts": []
            },
            {
                "Currency": "CAD",
                "Price": 30.00,
                    "Discounts": [
                        {
                            "CampaignId": "Campaign2",
                            "CouponDefinition": null,
                        }
                    ]
            }
}

标签: azure-cosmosdb

解决方案


请试试这个sql:

SELECT t.Currency,t.Price,t.Discounts FROM c JOIN t 
IN c.OrderHeader.Totals WHERE ARRAY_LENGTH(t.Discounts) > 0

结果如下:

[
    {
        "Currency": "CAD",
        "Price": 30,
        "Discounts": [
            {
                "CampaignId": "Campaign2",
                "CouponDefinition": null
            }
        ]
    }
]

希望它可以帮助你。


推荐阅读