CosmosDB SQL查询“任何”子字段

时间:2018-10-16 14:43:15

标签: azure-cosmosdb

鉴于如下所示的文档结构,其中“变体”具有基于N id的子条目,我想过滤内部的“ sku”字段。与此类似:

SELECT * FROM c WHERE c.variants.?.sku = "some_sku_1"

此处“ some_id_1”和“ some_id_2”是ID值,由数据驱动,不能作为查询的一部分。

Cosmos DB是否可行?如果可以,怎么办?

{
    "id": "45144",
    "variants": {
        "some_id_1": {
            "sku": "some_sku_1",
            "title": "some title 1"
        },
        "some_id_2": {
            "sku": "some_sku_2",
            "title": "some title 2"
        }
    }
}

1 个答案:

答案 0 :(得分:2)

如果不使用UDF / SPROC,则无法使用该架构执行此操作,但是如果您稍稍更改该架构,就可以做到。

模式:

{
    "id": "45144",
    "variants": [
        {
            "id": "some_id_1",
            "sku": "some_sku_1",
            "title": "some title 1"
        },
        {
            "id": "some_id_2"
            "sku": "some_sku_2",
            "title": "some title 2"
        }
    ]
}

查询:

SELECT * FROM c IN Item.variants WHERE c.sku == "some_sku_1"

请查看本文,以使您更好地了解使用“ IN”语句可以执行的操作,该语句可以迭代对象。in this answer