当我在AZure门户上运行以下查询时,它运行良好,但是当从.NET App以编程方式运行时,它给出了错误:
Azure CosmosDB门户上的原始查询:Response.Write("<script>window.location.href='HRDFORMIZIN.aspx';</script>")
工作正常
SELECT * FROM c where c.OrderDateTime > '2018-11-29T18:33:17.5957307Z'
消息:
{\“错误\”:[\“已使用过滤器指定了无效的查询 针对没有范围索引的路径。考虑添加允许扫描 请求中的标头。\“]}
我了解范围查询中的日期需要与字符串进行不同的处理,但是想知道它如何在门户网站上工作吗?我在代码中还缺少其他内容吗?
答案 0 :(得分:1)
{\“错误\”:[\“已使用过滤器指定了无效的查询 针对没有范围索引的路径。考虑添加允许扫描 请求中的标头。\“]}
您在此处收到的错误表明查询引擎找不到路径C.OrderDateTime的范围索引。请检查集合的Indexing Policy
,并确保将数字和字符串都索引为范围而不是哈希。有关索引策略的更多信息,请参见official document。
或者您可以在EnableScanInQuery
中将FeedOptions
设置为true,然后跟随错误details:Consider adding allow scan header in the request
。请参阅here。
var feedOptions = new FeedOptions
{
EnableScanInQuery = true,
};
据我所知,门户网站上的SQL查询不同于sdk查询或rest api查询。它将进行一些隐式优化,例如不必提供分区键即可在分区键列上执行查询。这并不意味着客户端查询操作中不需要提供分区键。