azure-cosmosdb - 如何在数据资源管理器中查询嵌套数组?
问题描述
我正在尝试在 Cosmos DB 上的 Data Explorer 中编写一个查询,以向我提供订单已应用折扣的结果列表。这要求我检查 Totals 数组的每个元素以查找不为空的 Discounts 元素。
我尝试在 ARRAY_CONTAINS 中使用 ARRAY_LENGTH ,如下所示,但没有返回结果集。我知道 ARRAY_CONTAINS 用于在数组中查找字段值,但我希望它会接受 ARRAY_LENGTH 命令。
SELECT * FROM c where ARRAY_CONTAINS(c.OrderHeader.Totals,{ARRAY_LENGTH(Discounts):1},true))
我还尝试使用以下查询检查 Discounts 数组的 CampaignId 字段中的值。它没有返回结果集。
SELECT * FROM c where ARRAY_CONTAINS(c.OrderHeader.Totals.Discounts,{CampaignId:null},false)
我认为有办法做到这一点,所以任何输入将不胜感激!
{
"OrderHeader": {
"Totals": [
{
"Currency": "CAD",
"Price": 10.00,
"Discounts": []
},
{
"Currency": "CAD",
"Price": 20.00,
"Discounts": []
},
{
"Currency": "CAD",
"Price": 30.00,
"Discounts": [
{
"CampaignId": "Campaign2",
"CouponDefinition": null,
}
]
}
}
解决方案
请试试这个sql:
SELECT t.Currency,t.Price,t.Discounts FROM c JOIN t
IN c.OrderHeader.Totals WHERE ARRAY_LENGTH(t.Discounts) > 0
结果如下:
[
{
"Currency": "CAD",
"Price": 30,
"Discounts": [
{
"CampaignId": "Campaign2",
"CouponDefinition": null
}
]
}
]
希望它可以帮助你。