假设在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来完成此操作,但这将不允许使用索引并导致全表扫描。就是说,如果您还有其他高度选择性的条件,那么在
WHERE
子句的末尾使用UDF可能是可以的。关于javascript - 如何在documentdb中编写查询以匹配精确数组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43393411/