Azure cosmosdb 匹配数组中多个值的CosmosDB SQL查询

Azure cosmosdb 匹配数组中多个值的CosmosDB SQL查询,azure-cosmosdb,Azure Cosmosdb,我正在使用COSMOSDB,我想编写一个SQL查询,它将匹配数组中的多个值。要详细说明,请假设您拥有以下集合: [ { "id": "31d4c08b-ee59-4ede-b801-3cacaea38808", "name": "Oliver Queen", "occupations": [ { "job_title": "Billionaire", "

我正在使用COSMOSDB,我想编写一个SQL查询,它将匹配数组中的多个值。要详细说明,请假设您拥有以下集合:

[
    {
        "id": "31d4c08b-ee59-4ede-b801-3cacaea38808",
        "name": "Oliver Queen",
        "occupations": [
            {
                "job_title": "Billionaire",
                "job_satisfaction": "pretty good"
            },
            {
                "job_title": "Green Arrow",
                "job_satisfaction": "meh"
            }
        ]
    },
    {
        "id": "689bdc38-9849-4a11-b856-53f8628b76c9",
        "name": "Bruce Wayne",
        "occupations": [
            {
                "job_title": "Billionaire",
                "job_satisfaction": "pretty good"
            },
            {
                "job_title": "Batman",
                "job_satisfaction": "I'm Batman"
            }
        ]
    },
    {
        "id": "d1d3609a-0067-47e4-b7ff-afc7ee1a0147",
        "name": "Clarke Kent",
        "occupations": [
            {
                "job_title": "Reporter",
                "job_satisfaction": "average"
            },
            {
                "job_title": "Superman",
                "job_satisfaction": "not as good as Batman"
            }
        ]
    }
]
我想写一个查询,返回所有职业头衔为“亿万富翁”和“蝙蝠侠”的条目。为了清楚起见,结果必须有两个职位。因此,在上述集合中,它应该只返回Bruce Wayne

到目前为止,我已经尝试:

SELECT c.id, c.name, c.occupations FROM c
WHERE ARRAY_CONTAINS(c.occupations, {'job_title': 'Billionaire' })
AND ARRAY_CONTAINS(c.occupations, {'job_title': 'Batman' })

两者都返回空结果


提前感谢

您需要使用ARRAY\u CONTAINS(ARRAY,search\u value,is\u partial\u match=true),即查询:

SELECT c.id, c.name, c.occupations 
FROM c
WHERE ARRAY_CONTAINS(c.occupations, {'job_title': 'Billionaire' }, true)
AND ARRAY_CONTAINS(c.occupations, {'job_title': 'Batman' }, true)
SELECT c.id, c.name, c.occupations 
FROM c
WHERE ARRAY_CONTAINS(c.occupations, {'job_title': 'Billionaire' }, true)
AND ARRAY_CONTAINS(c.occupations, {'job_title': 'Batman' }, true)