C# 如何在不知道数组索引的情况下使这个CosmosDB SQL查询工作?

C# 如何在不知道数组索引的情况下使这个CosmosDB SQL查询工作?,c#,azure-cosmosdb,azure-cosmosdb-sqlapi,C#,Azure Cosmosdb,Azure Cosmosdb Sqlapi,我以这样一种方式查询CosmosDB,即通过C#WEB API输入一个字符串并输出一些数据,对我有效的查询如下所示 SELECT * FROM c IN jongel.OriginalData.base.sales.variants WHERE c.globalTradeItemNumber.globalTradeItemNumberType[0].GTIN = '1111111111111' 问题是我必须知道globalTradeItemNumberType数组的数组索引,[0],在本例中,

我以这样一种方式查询CosmosDB,即通过C#WEB API输入一个字符串并输出一些数据,对我有效的查询如下所示

SELECT *
FROM c IN jongel.OriginalData.base.sales.variants
WHERE c.globalTradeItemNumber.globalTradeItemNumberType[0].GTIN = '1111111111111'
问题是我必须知道globalTradeItemNumberType
数组的
数组索引
[0]
,在本例中,它才能工作,但并不总是0,它可以是0-9之间的任何数字,基本上,我不知道如何重写查询,以便无论在哪里找到匹配数据的索引都可以工作

如何重写此查询,使我不需要事先知道
数组索引

---编辑---

缩短为仅包含所需部分的示例文档

{
    "id": "635af816-8db7-49c6-8284-ab85116b499b",
    "brand": "XXX",
    "IntegrationSource": "XXX",
    "DocumentType": "Item",
    "ItemInformationType": "",
    "ItemLevel": "Article",
    "ItemNo": "0562788040",
    "UpdatedDate": "1/1/2020 4:00:01 AM",
    "UpdatedDateUtc": "2020-01-01T04:00:01.82Z",
    "UpdatedBy": "XXX",
    "OriginalData": {
        "corporateBrandId": "2",
        "productId": "0562788",
        "articleId": "0562788040",
        "season": "201910",
        "base": {
            "sales": {
                "SAPArticleNumber": "562788040190",
                "simpleColour": {
                    "simpleColourId": "99",
                    "simpleColourDescription": "Green",
                    "translatedColourDescription": [
                        {
                            "languageCode": "sr",
                            "simpleColourDescription": "Zeleno"
                        },
                        {
                            "languageCode": "zh-Hans",
                            "simpleColourDescription": "绿色"
                        },
                        {
                            "languageCode": "vi-VN",
                            "simpleColourDescription": "Xanh la cay"
                        }
                    ]
                },
                "variants": [
                    {
                        "variantId": "0562788040001",
                        "variantNumber": "562788040190001",
                        "variantDescription": "YYYYYYYYY, XXS",
                        "sizeScaleAndCode": "176-001",
                        "netWeight": 0.491,
                        "unitsOfMeasure": {
                            "unitsOfMeasureType": [
                                {
                                    "alternativeUOM_ISO": "PCE",
                                    "length": 320,
                                    "width": 290,
                                    "height": 31,
                                    "unitOfDimension": "MM",
                                    "volume": 2876.8,
                                    "volumeUnit": "CCM",
                                    "weightUnit": "KG"
                                }
                            ]
                        },
                        "globalTradeItemNumber": {
                            "globalTradeItemNumberType": [
                                {
                                    "GTIN": "1111111111111",
                                    "GTINCategory": "Z3"
                                },
                                {
                                    "GTIN": "2222222222222",
                                    "GTINCategory": "Z3"
                                },
                                {
                                    "GTIN": "3333333333333",
                                    "GTINCategory": "IE"
                                }
                            ]
                        }
                    }
                ]
            }
        }
    }
}
我根据下面建议的答案尝试了以下查询,但没有成功

  SELECT *
FROM c 
WHERE ARRAY_CONTAINS(c.OriginalData.base.sales.variants.globalTradeItemNumber.globalTradeItemNumberType, {GTIN:"1111111111111"}, true)
我猜上面的失败是因为树的变体部分也是一个数组


注意:variants数组可以容纳多个对象,因此它并不总是索引[0]

您可以尝试使用array\u CONTAINS函数

SELECT *
FROM c IN jongel.OriginalData.base.sales.variants
WHERE ARRAY_CONTAINS(c.globalTradeItemNumber.globalTradeItemNumberType, {GTIN:"1111111111111"}, true)
这将允许查询搜索数组中的所有项以查找匹配的GTIN值


尝试使用“加入”。@user1672994我尝试加入到数组中,但每次都有0次命中,这一定是我完成的wrong@MattDouhan你能发布数据结构吗?@Sajeetharan是的,现在正在尝试获取它。我尝试了一些变体,但在执行此操作时找不到匹配项,我在问题中添加了一个示例文档,以便您可以看到文档的结构。我在回答中更新了WHERE子句,以反映实际的文档结构。看起来“变体”是一个数组,所以请尝试使用变体[0]。假设只有一个项目,这应该是可行的。如果变体可能包含多个项目,则您可能需要更复杂的内容。是的,这正是问题所在,变体数组中可能有很多变体。它并不总是索引0“我的最新版本”。我在一个包含多个变体的文档上尝试了这个方法,只要您只需要从结构的变体部分提取数据,它似乎就可以工作。