我有以下查询:
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.
我完全不知道这个错误信息是什么:(
有人有任何想法吗?
答案 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);
它似乎工作!如果有任何不良副作用,我会告诉你。