Warm tip: This article is reproduced from serverfault.com, please click

其他-CosmosDB,帮助展平数组

(其他 - CosmosDB, help flatten an array)

发布于 2020-12-03 18:27:07

我正在尝试展平和过滤CosmosDB中的json数据。数据如下所示,我想展平变量数组中的所有内容。我需要显示id,数量和orderidentifiers的数组(仅orderId字段)

我的json:

{
        "id": "b71687be180da8116208cbb9a40e7e5e630e6cd595f3e09040a155978a2169f3",
        "amount": 5354.39,
        "orderIdentifiers": [
            {
                "orderId": "16520328183646646587",
                "itemIds": [
                    "90420839-2769-3acc-a686-3171386190a7"
                ]
            },
            {
                "orderId": "45288779686596595261",
                "itemIds": [
                    "fb662e41-1c7e-3f36-8cfd-ef2f3c7f0752",
                    "0b97371c-4eb9-3ec5-8ab9-bb65a9c9efe1"
                ]
            },
            {
                "orderId": "859986489484974993023",
                "itemIds": [
                    "5c16bb0d-f1a4-3289-bda5-28d0b09a2a56",
                    "ffb5dc2a-6e43-321d-97cb-3279ddfd1e39",
                    "781953ad-83e0-30da-a563-e69ed2a752c6",
                    "1936e885-c41a-3bd1-a3e0-80e7e3089fe4"
                ]
            },
            {
                "orderId": "80455639909013091834",
                "itemIds": [
                    "147d4a11-6c05-3fe3-8e4c-bcda3d238845",
                    "6c586585-6355-393d-a6f4-6fa6c665f3b8"
                ]
            }
           ]
    }

当我运行此查询时:从finalcategorysales中选择c.id,c.amount,oi.orderId c在c.orderIdentifiers中加入oi,其中c.id ='b71687be180da8116208cbb9a40e7e5e630e6cd595f3e09040a155978a2169f3'

结果显示给我orderIdentifiers数组中的一个元素

{     "id": "b71687be180da8116208cbb9a40e7e5e630e6cd595f3e09040a155978a2169f3",
        "amount": 5354.39,
        "orderId": "16520328183646646587"
    },
Questioner
Anggelo Bernaola Ibarra
Viewed
0
Steve Zhao 2020-12-04 07:25:07

你可以尝试使用类似以下SQL的方法:

SELECT 
    c.id, c.amount, Array(SELECT oi.orderId FROM c JOIN oi IN c.orderIdentifiers) AS orderIds  
FROM c 
WHERE c.id='b71687be180da8116208cbb9a40e7e5e630e6cd595f3e09040a155978a2169f3'

结果:

[
    {
        "id": "b71687be180da8116208cbb9a40e7e5e630e6cd595f3e09040a155978a2169f3",
        "amount": 5354.39,
        "orderIds": [
            {
                "orderId": "16520328183646646587"
            },
            {
                "orderId": "45288779686596595261"
            },
            {
                "orderId": "859986489484974993023"
            },
            {
                "orderId": "80455639909013091834"
            }
        ]
    }
]