【问题标题】:Cosmos db sql query for search in array用于在数组中搜索的 Cosmos db sql 查询
【发布时间】:2019-12-18 12:18:06
【问题描述】:

我有一个如下文件结构

[
    {
        "id": "1",
        "author": "John Smith",
        "partNames": [
            "PART.5",
            "PART.10",
            "PART.15",
            "PART.30",
            "PART.31"
        ]
        ...
    },
    {
        "id": "2",
        "author": "Mike Smith",
        "partNames": [
            "PART.4",
            "PART.6",
            "PART.17",
            "PART.18",
            "PART.20"
        ]
        ...
    }
]

我试图通过字段作者和partnames来实现对用户的搜索,因此用户可以像

一样查询

SELECT * FROM c WHERE CONTAINS(c.author, 'John')

和用户将进入结果id=1文档,因为作者的名称是John

下一步是允许用户按零件询问文档,例如我想收到一个文件,其中PART.4存在,因此查询将是

SELECT * FROM c WHERE ARRAY_CONTAINS(c.partNames, 'PART.4', true)

并返回文件id=2

更进一步的我想制作查询,允许用户键入PART.1,他将收到文件id=1id=2,因为两者都有零件以PART.1

开头

所以有没有办法实现它?

【问题讨论】:

    标签: sql azure-cosmosdb


    【解决方案1】:

    请测试下面的sql:

    SELECT distinct value c FROM c
    join p in c.partNames
    where STARTSWITH(p, "PART.1")
    

    结果:


    更新:

    Op 更改了一点数组,因为不是 [part.1, part2...] 项目,而是创建了另一个结构,如 [ {part: part.1}, {part: part.2} ... ],并设法使用类似于此处描述的用户定义函数进行查询 DocumentDB SQL with ARRAY_CONTAINS,它工作正常。

    【讨论】:

    • 看起来很酷,但是我更改了一些数组,因为我没有使用 [part.1, part2...] 项目,而是创建了另一个结构,例如 [ {part: part.1}, {part: part .2} ... ] 并设法使用类似于此处所述stackoverflow.com/questions/35137136/… 的用户定义函数进行查询,它工作正常,但也许我会回到你的解决方案。取决于需要。谢谢!
    • @Vrangz 没关系。听起来你在你的 sql.Anyway 中使用 udf,很高兴看到你已经通过了。如果您不介意,我在回答中总结了您的解决方案,以便您可以接受结束此案的答案。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2018-12-17
    • 1970-01-01
    • 2018-07-13
    • 1970-01-01
    • 2019-09-26
    • 2017-12-15
    • 1970-01-01
    • 2021-03-10
    相关资源
    最近更新 更多