CosmsDB日期字段查询

时间:2018-12-03 04:08:07

标签: .net azure-cosmosdb date-range

当我在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'

消息:

  

{\“错误\”:[\“已使用过滤器指定了无效的查询   针对没有范围索引的路径。考虑添加允许扫描   请求中的标头。\“]}

我了解范围查询中的日期需要与字符串进行不同的处理,但是想知道它如何在门户网站上工作吗?我在代码中还缺少其他内容吗?

1 个答案:

答案 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查询。它将进行一些隐式优化,例如不必提供分区键即可在分区键列上执行查询。这并不意味着客户端查询操作中不需要提供分区键。