当我在AZure门户上运行以下查询时,它运行得很好,但是当以编程方式从.NET应用程序运行时,它会出现一个错误:
关于Azure CosmosDB门户的原始查询:SELECT * FROM c where c.OrderDateTime > '2018-11-29T18:33:17.5957307Z'
运行良好
string queryString = $"SELECT * FROM c Where c.OrderDateTime >= '{DateTime.UtcNow.AddDays(-1).ToString("s")}'"; Gives the following error:
消息:
{\“错误\”:“已针对未编入范围索引的路径指定了无效的查询。请考虑在请求中添加允许扫描头。\”}
我理解范围查询中的日期需要与字符串不同的处理,但我想知道它如何在门户上工作?我的代码里是不是漏了什么东西?
发布于 2018-12-02 22:22:27
{\“错误\”:“已针对未编入范围索引的路径指定了无效的查询。请考虑在请求中添加允许扫描头。\”}
您在这里收到的错误指示查询引擎找不到路径C.OrderDateTime的范围索引。请检查集合的Indexing Policy
,并确保将数字和字符串都索引为范围而不是散列。有关索引策略的更多信息,请参见正式文件。
或者,可以在EnableScanInQuery
中将FeedOptions
设置为true,遵循错误details:Consider adding allow scan header in the request
。请参考这里。
var feedOptions = new FeedOptions
{
EnableScanInQuery = true,
};
据我所知,门户上的SQL查询不同于sdk查询或rest查询。它将进行一些隐式优化,例如不必提供分区键来在分区键column.That上执行查询,并不意味着不需要在客户端查询操作中提供分区键。
https://stackoverflow.com/questions/53587337
复制相似问题