【问题标题】:DocumentDB: SQL to select match on optional elementDocumentDB:在可选元素上选择匹配的 SQL
【发布时间】:2016-09-17 04:18:50
【问题描述】:

假设我在 DocumentDB 集合中有这 3 个文档:

[
    {
        "name": "tiger",
        "keywords": [
            "animal",
            "cat",
            "stripes"
        ]
    },
    {
        "name": "cat"
    },
    {
        "keywords": [
            "panther",
            "black"
        ]
    }
]

当 'keywords' 和 'name' 是文档中的可选元素时,我将如何构建单个 SQL 查询以返回“name”匹配“cat”或“keyword”匹配“cat”的所有文档?

【问题讨论】:

    标签: azure-cosmosdb


    【解决方案1】:

    试试这个查询:

    选择 * 从根 r WHERE r.name = 'cat' OR ARRAY_CONTAINS(r.keywords, 'cat')

    【讨论】:

    • 效果很好。您知道如何修改查询,以便 ARRAY_CONTAINS 以与 CONTAINS 相同的方式匹配部分字符串吗?目前 ARRAY_CONTAINS 必须与字符串完全匹配。例如字符串“ca”: SELECT * FROM root r WHERE CONTAINS(r.name,'ca') OR ARRAY_CONTAINS(r.keywords, 'ca')
    • ARRAY_CONTAINS 将搜索项与数组中的每个项进行严格的相等比较。请注意,搜索项可以是任何类型。这里的另一种方法是 SELECT VALUE r FROM root r JOIN k IN r.keywords WHERE CONTAINS(r.name, 'ca') OR CONTAINS(k, 'ca') 请记住,JOIN 会使关键字数组变平结果集是输入文档与数组中每个项目的叉积。例如,此查询将返回第二个文档两次,因为 r.name 满足两个数组项的条件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-23
    • 2020-03-06
    • 2016-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多