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)