如何在 documentdb 中编写查询以匹配精确数组?

How to write query in documentdb to match exact arrays?

假设在 documentdb 集合中我有 1 个文档:

{ "school": "1254", "types": [ "manager","customer", "teacher","principal" ] }

现在我想编写 1 个带有类型的查询,假设我有与现有文档具有相同值的类型,那么如何匹配查询中的两个数组?

如果您想要子集匹配,我建议您(在代码中)构造一个包含一堆 AND 的查询:

SELECT * FROM c WHERE <myArray[0]> IN c.types AND <myArray[1]> IN c.types...

或者如果你想要一个真正精确的匹配,包括顺序:

SELECT * FROM c WHERE c.types[0] = <myArray[0]> AND c.types[1] = <myArray[1]>...

或者如果你想要精确但不按顺序这样:

SELECT * FROM c WHERE c.types[0] IN <myArray> AND c.types[1] IN <myArray>...

我的猜测是它们的性能都差不多,但是如果您发现带有 IN 子句的两个性能不如使用 = 的那个,那么您可能想要存储数组时对数组进行排序,然后对要比较的数组进行排序。

您也可以使用 UDF 来完成此操作,但这不允许使用索引并导致完整的 table 扫描。也就是说,如果您有其他高度选择性的标准,那么在 WHERE 子句的那一端使用 UDF 可能没问题。