我正在尝试使用 SQL 查询从 Cosmos DB 中检索项目。我目前正在使用以下结构在 Cosmos DB 中存储项目...
{ “ID”:[ “123456789”, “987654321”, “121542535” ] }
然后,我需要从 Cosmos DB 中查询我的项目,并找到具有包含另一个 Id 数组中的任何值的数组的任何项目,如下所示。
requiredIds = [“123456789”,“4828927593”]
在 SQL 中执行此操作最有效的方法是什么?
我尝试过使用 ARRAY_CONTAINS 方法,但它只支持在数组中搜索奇异值。
这样的东西会很棒... SELECT * FROM c WHERE ARRAY_CONTAINS(c.IDs, requiredIds)
我知道我可以分离出 requiredIds 数组的值并使用 OR 条件或类似的条件,但我希望有更有效的方法。
提前致谢。
您可以使用以下查询:
SELECT *
FROM c
WHERE ARRAY_LENGTH(setIntersect(c.IDs, ['123456789', '4828927593'])) > 0
这个找到两个数组中都出现的id,然后检查结果数组的长度是否大于0;换句话说,两个数组中都至少出现一个id。
SELECT VALUE c
FROM c
JOIN i IN c.IDs
WHERE ARRAY_CONTAINS(['123456789', '4828927593'], i)
这会执行自连接并检查数组中是否出现任何
i
。它更具可读性,但如果每个文档有超过 1 个匹配项,它也会多次返回结果。如果您也知道 id 匹配后,可能会更好。还可能产生更好的性能(不确定查询 1 是否利用索引)。