我怎样才能确保 return 是一个数组?

How can I make sure the return is an array?

我正在使用 COALESCE 运算符来确保我 return 一个一致的数据集。

查询如下所示

SELECT c.id, c.ItemLevel, c.ItemNo, bv.variantId, bv.variantDescription, c.DetailedData.locales[0].images ?? c.BasicData.asset.assets[0].locations[1].path AS images, c.PriceData.WhitePrice, c.PriceData.RedPrice, c.PriceData.DiscountPercentage, c.PriceData.TypeOfDiscount
FROM c
JOIN bv IN c.BasicData.base.sales.variants
WHERE c.brand = 'XXX'
AND c.Consumer = 'YYY'
AND bv.variantId = 'TTT'
AND c.Season = 'XXX'

我的挑战是 c.DetailedData.locales[0].images 是一个数组,但 c.BasicData.asset.assets[0].locations[1].path 不是。

我需要 c.BasicData.asset.assets[0].locations[1].path 是一个数组,这样 JSON returned 是一致的,所以我可以直接在我的移动应用程序中循环数组。

如何做到这一点?

我可能会得到你的分数。

例如,您有以下 2 个示例文档:

[
    {
        "DetailedData": {
            "locales": [
                {
                    "images": [
                        {
                            "image": "pic1"
                        },
                        {
                            "image": "pic2"
                        }
                    ]
                }
            ]
        }
    },
    {
        "DetailedData": {},
        "BasicData": {
            "asset": {
                "assets": [
                    {
                        "locations": [
                            {
                                "path": "AAA"
                            },
                            {
                                "path": "BBB"
                            }
                        ]
                    }
                ]
            }
        }
    }
]

如果你执行你的sql,你会得到不同的格式:

SELECT c.DetailedData.locales[0].images ?? c.BasicData.asset.assets[0].locations[1].path AS images
FROM c

您可以添加 [] 来重置列,例如:

SELECT c.DetailedData.locales[0].images ?? [{"image": c.BasicData.asset.assets[0].locations[1].path}] AS images
FROM c

输出: