查询对象数组中具有特定值的文档

Query document with a particular value in array of objects

我在 cosmos DB 中有一系列文档,其结构如下:

{
    "id" : "s2912vdla"
    "allowed-usrs": [
        {
            "id": "myId"
        }
    ],
    ....
}

我需要能够获取在 allowed-usrs.id 中具有 ID myId 的所有文档。

不幸的是,我不清楚 SQL Cosmos API 是如何做到这一点的——我在文档中读到我应该使用 IN 子句,但我可以' 似乎让它工作:

SELECT * FROM c IN t.allowed-usrs WHERE c.id = "myId"

尝试以下查询:

SELECT VALUE c --because we have JOIN we can't use *
FROM c --we need c because we want to return the full object
JOIN a IN c['allowed-usrs'] --brackets required because the char '-' is not allowed
WHERE a.id = 'myId'

或者更正确地使用下面的查询。如果 myId 在允许的用户列表中出现多次(因为 JOIN),第一个查询将产生重复的项目,而下面只产生一个。

SELECT *
FROM c
WHERE ARRAY_CONTAINS(c['allowed-usrs'], { 'id': 'myId' }, true)
--looks for a partial match in the allowed user array