任何想法为何我在使用其余api在Cosmos DB中执行以下查询时 我收到以下错误?没有顺序的相同查询工作正常...
在两种情况下,我都设置了标题"x-ms-documentdb-query-enablecrosspartition: True"
,并且我使用PHP发出请求。
有效的多分区查询:
从c中选择c.id,c.name,c.age,其中c.age = 30
具有错误的多分区查询:
从c中选择c.id,c.name,c.age,其中c.age = 30(按c.age asc排序)
错误:
客户端错误:
POST https://yeapp-cosmosdb.documents.azure.com//dbs/-JJZAA==/colls/-JJZAL+WPKw=/docs
产生
400 BadRequest
响应: {“ code”:“ BadRequest”,“ message”:“”提供的跨分区查询可以 不能直接由网关服务。这是(被截断的...)
答案 0 :(得分:1)
我也有同样的问题,在我看来这是最近才表现出来的。我以前没有。 当我在具有联接的查询上使用SELECT DISTINCT时,我遇到了同样的问题。这就是为什么 https://docs.microsoft.com/en-us/rest/api/cosmos-db/querying-cosmosdb-resources-using-the-rest-api#Queries-that-cannot-be-served-by-gateway
如果您删除ORDER BY,而在我的情况下为DISTINCT,则查询有效...
这很不幸。注意:相同的查询在Azure门户中有效,但在REST API中无效。但是,Azure门户会迫使您浏览分页的结果,这并不是获取长查询结果或自动任务的真正方法。
从上面的链接中我们可以看到:
网关无法服务任何需要跨连续状态的查询。这包括: 最佳 订购 偏移极限 骨料 不同 通过...分组 网关可以提供的查询包括: 简单的预测 过滤器
答案 1 :(得分:0)
我在使用R脚本发出请求时遇到了同样的麻烦。数据库的索引策略是默认的which includes range and spatial indexes for all items。只要没有一个结果,我的查询就可以按预期工作,不带“ ORDER BY”子句,甚至不带 带有“ ORDER BY”子句。同样,当我的“ WHERE”子句指定范围(例如, c._ts > 12345678910
,所以我认为ngruson的建议不是问题。
根据this page,不良的JSON附件可能导致400错误。
这是有效的JSON:
{\"query\":\"SELECT TOP 100 * FROM c WHERE c.id = \\\"F6OWIDUtl0PElDAg0BPDr-j\\\" ORDER BY c._ts DESC\",\"parameters\":[]}
这是返回错误的JSON:
{\"query\":\"SELECT TOP 100 * FROM c WHERE c.id != null ORDER BY c._ts DESC\",\"parameters\":[]}
我看不出明显的区别,所以我假设问题出在其他地方。
(我会在注释中添加此内容,但是SO不会让我对我的代表级别进行注释,因此它要么在这里“答案”,要么在其他地方重复该问题。)