Thật dễ dàng để lấy thời gian từ một ObjectId
... tuy nhiên bạn KHÔNG nhận được độ chính xác ms.
org.bson.types.ObjectId
có 2 phương thức bạn có thể sử dụng trên đó:getTimeSecond()
và getTime()
(giống như `getTimeSecond() * 1000L
). Những điều này sẽ nhận được một dấu thời gian unix của bạn.
Tôi chưa sử dụng MongoDB với Spring - nhưng nếu bạn có thể sử dụng ObjectId
thực tế ví dụ của nó đơn giản như gọi một trong các phương thức ở trên.
Bây giờ - để truy vấn tài liệu trong một phạm vi thời gian, bạn phải quay ngược lại và tạo ObjectId
các đối tượng dựa trên dấu thời gian. Một lần nữa - điều này thật đơn giản - ObjectId
có một hàm tạo có thể làm điều này cho bạn:
ObjectId(Date time)
Vì vậy - hãy tạo 2 ObjectId
các trường hợp đại diện cho giới hạn thời gian tối thiểu và tối đa của bạn, sau đó thực hiện một truy vấn như:
db.collection.find({ "field" : { $gt: value1, $lt: value2 } } );
trong đó value1
và value2
đại diện cho ObjectId
ví dụ bạn đã tạo qua ObjectId(Date time)