每个文档在存储时都包含日期属性,因此如何获取在特定日期或两个日期之间存储的数据。做这个的最好方式是什么。我的实现基于Java。提前谢谢。
答案 0 :(得分:0)
我没有Java代码,但是你必须设置你的集合以在DateTime字符串上使用Range索引,然后你就可以查询某个日期内的日期了。时间范围。 .NET代码用于设置范围索引是:
DocumentCollection collection = new DocumentCollection { Id = "orders" };
collection.IndexingPolicy = new IndexingPolicy(new RangeIndex(DataType.String) { Precision = -1 });
await client.CreateDocumentCollectionAsync("/dbs/orderdb", collection);
请参阅https://docs.microsoft.com/en-us/azure/documentdb/documentdb-working-with-dates#indexing-datetimes-for-range-queries并在此页面上搜索范围https://docs.microsoft.com/en-us/azure/documentdb/documentdb-indexing-policies。
答案 1 :(得分:0)
使用Azure DocumentDB SDK for Java按_ts
属性查询文档。文档_ts
属性如下所示。
_ts :这是系统生成的属性。它指定资源的上次更新时间戳。该值是时间戳。
以下是我的示例代码。 _ts
单位是第二位。
// Initialize a DocumentDb client.
String serviceEndpoint = "https://<your-documentdb-name>.documents.azure.com:443/";
String masterKey = "<your-documentdb-key>";
DocumentClient client = new DocumentClient(serviceEndpoint, masterKey, ConnectionPolicy.GetDefault(), ConsistencyLevel.Session);
// Get a collection link via collection id.
String collId = "<collection-Id>";
String query = String.format("SELECT * from ROOT r WHERE r.id = '%s'", dcId);
FeedOptions options = null;
List<DocumentCollection> dcs = client.queryCollections(dbLink, query, options).getQueryIterable().toList();
String collLink = dcs.size() >0 ? dcs.get(0).getSelfLink() : null;
// Generate a query string, see below.
.......
client.queryDocuments(collection.getSelfLink(), query, null);
用于获取存储在特定日期的数据的查询字符串:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String dateStr = "2017-03-01";
long timestamp = sdf.parse(dateStr).getTime()/1000;
String query = String.format("select * from c where c._ts = %d", timestamp);
用于获取存储在两个日期之间的数据的查询字符串:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String startDateStr = "2017-03-01";
String endDateStr = "2017-03-31";
long tsStart = sdf.parse(startDateStr).getTime()/1000;
long tsEnd = sdf.parse(endDateStr).getTime()/1000;
String query = String.format("select * from c where c._ts >= %d and c._ts <= %d", tsStart, tsEnd);