【问题标题】:CosmosDB SQL String functions not working with a join?CosmosDB SQL 字符串函数不能与连接一起使用?
【发布时间】:2018-02-27 16:58:34
【问题描述】:

我在 DocumentDB 中有一个包含如下对象的集合:

{
"id":"1de03a93-729d-43da-985a-12584079b4f8",
"Components":[
     {
     "Name":"MyComponentName1",
     "Value": 12345
     },
     {
     "Name":"MyComponentName2",
     "Value": 34567
     },
     {
     "Name":"MyComponentName3",
     "Value": 56789
     }
     ]
     ...other properties irrelevant to question...
}

查询 CosmosDB 时,我有以下查询:

SELECT VALUE d FROM c
JOIN d IN c.Components
WHERE d.Name="MyComponentName1"

正确返回:

{
"Name":"MyComponentName1",
"Value":12345
}

但是,当我尝试基于字符串运算符进行查询时:

SELECT VALUE d FROM c
JOIN d IN c.Components
WHERE CONTAINS(d.Name,'MyComponent') --OR STARTSWITH OR ENDSWITH

我没有得到任何结果。

如果我采用 与上述相同的查询,但我在 where 子句中添加了 id 限制:

SELECT VALUE d FROM c
JOIN d IN c.Components
WHERE CONTAINS(d.Name,'MyComponent')
AND c.id = "1de03a93-729d-43da-985a-12584079b4f8"

我得到了我期望的结果,但显然只针对id。我需要与字符串运算符匹配的所有文档。

这是 CosmosDB 的错误,还是我做错了什么?

【问题讨论】:

    标签: azure-cosmosdb


    【解决方案1】:

    尼克,

    确保在执行此查询时遵循所有延续。请记住,带有包含的查询将导致完全扫描,因此它可能不会在一次继续中完成。这与 EndsWith 的情况相同。然而,对于 StartsWith,它应该使用索引,但前提是集合索引策略在字符串上定义了范围索引;否则,它仍然是扫描。

    【讨论】:

    • 啊,就是这样。我知道这将是一个性能不佳的查询,我只是在调查另一种情况时尝试提取一些测试数据。我在 Data Explorer 中运行此查询并没有得到任何结果。在 Query Explorer 中运行查询可以正确处理延续并显示适当的结果。
    猜你喜欢
    • 2017-12-13
    • 2021-01-26
    • 2014-06-21
    • 1970-01-01
    • 2011-10-20
    • 1970-01-01
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多