Nếu bạn muốn nhận được tất cả những điều mới trong 5 phút vừa qua, bạn sẽ phải thực hiện một số tính toán, nhưng không khó ...
Trước tiên, tạo một chỉ mục trên thuộc tính bạn muốn khớp (bao gồm hướng sắp xếp -1 cho giảm dần và 1 cho tăng dần)
db.things.createIndex({ createdAt: -1 }) // descending order on .createdAt
Sau đó truy vấn các tài liệu được tạo trong 5 phút cuối (60 giây * 5 phút) .... bởi vì javascript .getTime()
trả về mili giây mà bạn cần phải đưa ra 1000 trước khi bạn sử dụng nó làm đầu vào cho hàm new Date()
tạo.
db.things.find({
createdAt: {
$gte: new Date(new Date().getTime()-60*5*1000).toISOString()
}
})
.count()
Giải thích cho new Date(new Date().getTime()-60*5*1000).toISOString()
như sau:
Đầu tiên chúng tôi tính toán "5 phút trước":
new Date().getTime()
cho chúng ta thời gian hiện tại tính bằng mili giây
- Chúng tôi muốn trừ 5 phút (tính bằng ms) từ đó:
5*60*1000
- Tôi chỉ nhân với 60
giây để dễ dàng thay đổi. Tôi chỉ có thể thay đổi 5
thành 120
nếu tôi muốn 2 giờ (120 phút).
new Date().getTime()-60*5*1000
cho chúng tôi 1484383878676
(5 phút trước trong ms)
Bây giờ chúng ta cần đưa dữ liệu đó vào một hàm new Date()
tạo để có được định dạng chuỗi ISO theo yêu cầu của dấu thời gian MongoDB.
{ $gte: new Date(resultFromAbove).toISOString() }
(truy vấn mongodb .find ())
- Vì chúng tôi không thể có các biến nên chúng tôi làm tất cả trong một lần:
new Date(new Date().getTime()-60*5*1000)
- ... sau đó chuyển đổi thành chuỗi ISO:
.toISOString()
new Date(new Date().getTime()-60*5*1000).toISOString()
cho chúng tôi 2017-01-14T08:53:17.586Z
Tất nhiên điều này dễ dàng hơn một chút với các biến nếu bạn đang sử dụng trình điều khiển gốc nút-mongodb, nhưng điều này hoạt động trong trình vỏ mongo, đây là điều tôi thường sử dụng để kiểm tra mọi thứ.