【问题标题】:How to write query in documentdb to match exact arrays?如何在 documentdb 中编写查询以匹配精确数组?
【发布时间】:2017-04-13 21:44:08
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript node.js database azure azure-cosmosdb


    【解决方案1】:

    如果您想要子集匹配,我建议您(在代码中)使用一堆 ANDs 构造一个查询:

    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 可能没问题。

    【讨论】:

    • larry 感谢您的回复,但我无法解决我的查询问题,可能我需要编写 UDF 来满足我的要求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多