CosmosDB SQL String函数无法使用连接?

时间:2018-02-27 16:58:35

标签: azure-cosmosdb

我在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
}

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

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。我需要所有与String运算符匹配的文档。

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

1 个答案:

答案 0 :(得分:2)

尼克,

确保在执行此查询时遵循所有延续。请记住,带有Contains的查询将导致完整扫描,因此可能无法在单个延续中完成。这是与EndsWith相同的情况。但是,对于StartsWith,它应该使用索引,但仅当集合索引策略定义字符串的范围索引时;否则,它仍然是扫描。