mongodb中根據時間範圍進行查詢
阿新 • • 發佈:2019-02-04
時間欄位處於資料頂層結構中
例如: 當前資料庫中有1000條資料,資料的結構為:
{
"_id" : { "$oid" : "587dc4069f527a223ca81f4f" },
"index" : 664,
"create" : { "$date" : 1484637190565 }
}
時間欄位create
就處於資料的最頂層,這種型別的資料查詢實現其實很簡單,是需要使用eq、gt等方法即可,例如:
- 實現方法一
collection.find(
new Document("create",
new Document("$gt" , new Date(1484637189630l))
)
).forEach(new Block<Document>() {
public void apply(Document document) {
System.out.println(document.toJson());
}
});
- 實現方法二
collection.find(gt("create",new Date(1484637189630l))).forEach(
new Block<Document>() {
public void apply(Document document) {
System.out.println(document.toJson());
}
});
時間欄位處於資料的巢狀資料結構中
例如:當前資料庫中有1000條資料,資料的結構為:
{
"_id" : { "$oid" : "587dc4069f527a223ca81f51" },
"index" : 666,
"times" : {
"ct " : { "$date" : 1484637190587 }
}
}
時間欄位ct
處於巢狀資料times
中,遇到這種結構的資料,還需要根據時間為條件進行查詢資料,就需要以ct
的完整查詢路徑為查詢條件進行查詢,例如:
- 實現方法一
collection.find(
new Document("times.ct",
new Document("$gt", new Date(1484637189630l))
)
).forEach(new Block<Document>() {
public void apply(Document document) {
System.out.println(document.toJson());
}
});
- 實現方法二
collection.find(gt("times.ct",new Date(1484637189630l))).forEach(
new Block<Document>() {
public void apply(Document document) {
System.out.println(document.toJson());
}
});
這兩種方法中均採用點號“.”分割,將ct
的完整路徑作為查詢引數進行查詢。
這種查詢方法其實在非時間型別上也是適用,不過這是我平時沒有注意到的一個細節問題,記錄下來方便查詢。