C# 如何在不知道数组索引的情况下使这个CosmosDB SQL查询工作?
我以这样一种方式查询CosmosDB,即通过C#WEB API输入一个字符串并输出一些数据,对我有效的查询如下所示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],在本例中,
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“我的最新版本”。我在一个包含多个变体的文档上尝试了这个方法,只要您只需要从结构的变体部分提取数据,它似乎就可以工作。