You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Cosmos DB中查询数组内符合条件的集合属性?

Cosmos DB数组属性查询实现方案

针对你提供的文档结构,要查询addressArray.addresses数组中type为City且city是巴黎(Paris)或纽约(New York)的地址,有两种常用的实现方式,结合你的SQL经验,以下是具体语句和说明:

方式一:展开数组直接筛选目标元素

使用JOIN关键字展开数组,将数组中的每个元素作为独立的查询对象,直接过滤符合条件的地址:

SELECT a
FROM c
JOIN a IN c.addressArray.addresses
WHERE a.type = 'City' AND a.city IN ('Paris', 'New York')

执行后会返回所有符合条件的地址对象,结果示例:

[
    {
        "type": "City",
        "city": "Paris"
    },
    {
        "type": "City",
        "city": "New York"
    }
]

方式二:保留原文档结构,提取匹配的数组子集

如果需要返回包含符合条件地址的完整文档(或指定字段),同时提取出匹配的地址,可以使用ARRAY_FILTER函数:

SELECT 
    c.id,
    c.addressArray.type,
    ARRAY_FILTER(c.addressArray.addresses, a => a.type = 'City' AND a.city IN ('Paris', 'New York')) AS matchingAddresses
FROM c
WHERE ARRAY_LENGTH(ARRAY_FILTER(c.addressArray.addresses, a => a.type = 'City' AND a.city IN ('Paris', 'New York'))) > 0

ARRAY_FILTER会遍历数组并返回满足条件的元素组成的新数组,WHERE子句确保只返回存在匹配地址的文档,结果示例:

[
    {
        "id": "123",
        "type": "Home",
        "matchingAddresses": [
            {
                "type": "City",
                "city": "Paris"
            },
            {
                "type": "City",
                "city": "New York"
            }
        ]
    }
]

补充说明

若只需判断文档中是否存在符合条件的数组元素,可使用ARRAY_CONTAINS结合复杂条件(需指定第三个参数为true启用部分匹配):

SELECT c.id
FROM c
WHERE ARRAY_CONTAINS(c.addressArray.addresses, {type: 'City'}, true) 
  AND (ARRAY_CONTAINS(c.addressArray.addresses, {city: 'Paris'}, true)
       OR ARRAY_CONTAINS(c.addressArray.addresses, {city: 'New York'}, true))

这种方式更适合简单的存在性判断,不过直观性不如前两种方案。

内容的提问来源于stack exchange,提问作者Learn AspNet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 10:02:23