我在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的错误,还是我做错了什么?
答案 0 :(得分:2)
尼克,
确保在执行此查询时遵循所有延续。请记住,带有Contains的查询将导致完整扫描,因此可能无法在单个延续中完成。这是与EndsWith相同的情况。但是,对于StartsWith,它应该使用索引,但仅当集合索引策略定义字符串的范围索引时;否则,它仍然是扫描。