查询对象数组中具有特定值的文档
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
我在 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