首页 > 解决方案 > 如何确保返回是一个数组?

问题描述

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

查询如下所示

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 是一致的,这样我就可以直接在我的移动应用程序中循环该数组。

如何才能做到这一点?

标签: c#azure-cosmosdbazure-cosmosdb-sqlapi

解决方案


我可能会得到你的分数。

例如,您有以下 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

输出:

在此处输入图像描述


推荐阅读