Azure DocumentDB:按DateTime排序和过滤

时间:2017-03-22 09:41:24

标签: azure azure-cosmosdb

我有以下查询:

SELECT * FROM c 
WHERE c.DateTime >= "2017-03-20T10:07:17.9894476+01:00" AND c.DateTime <= "2017-03-22T10:07:17.9904464+01:00"
ORDER BY c.DateTime DESC

因为你可以看到我对类型为WHERE的属性有一个DateTime条件,我想用同一个对我的结果进行排序。 查询以以下错误结束:

Order-by item requires a range index to be defined on the corresponding index path.

我完全不知道这个错误信息是什么:(

有人有任何想法吗?

2 个答案:

答案 0 :(得分:1)

您还可以执行一项不需要显式索引的操作。 Azure documentBD默认为数字字段提供索引,因此您可以以长格式存储日期。因为您已经将日期转换为字符串,您还可以将日期转换为长存储,然后您可以实现范围查询。

答案 1 :(得分:1)

我认为我找到了一个可能的解决方案,感谢指出索引的问题。

如下文https://docs.microsoft.com/en-us/azure/documentdb/documentdb-working-with-dates#indexing-datetimes-for-range-queries所述,我将数据类型字符串的索引更改为RangeIndex,以允许范围查询:

DocumentCollection collection = new DocumentCollection { Id = "orders" };
collection.IndexingPolicy = new IndexingPolicy(new RangeIndex(DataType.String) { Precision = -1 });
await client.CreateDocumentCollectionAsync("/dbs/orderdb", collection);

它似乎工作!如果有任何不良副作用,我会告诉你。