यदि आप पिछले 5 मिनट में सभी नई चीजें प्राप्त करना चाहते हैं, तो आपको कुछ गणनाएं करनी होंगी, लेकिन यह कठिन नहीं है ...
पहले उस संपत्ति पर एक इंडेक्स बनाएं जिसे आप मैच करना चाहते हैं (अवरोही क्रम के लिए क्रमांक -1 और आरोही के लिए 1 शामिल करें)
db.things.createIndex({ createdAt: -1 }) // descending order on .createdAt
फिर अंतिम 5 मिनट (60 सेकंड * 5 मिनट) में बनाए गए दस्तावेज़ों के लिए क्वेरी करें ... क्योंकि जावास्क्रिप्ट के .getTime()
रिटर्न मिलिसेकंड्स आपको new Date()
निर्माणकर्ता के इनपुट के रूप में उपयोग करने से पहले 1000 तक की गणना करने की आवश्यकता है ।
db.things.find({
createdAt: {
$gte: new Date(new Date().getTime()-60*5*1000).toISOString()
}
})
.count()
इसके लिए स्पष्टीकरण new Date(new Date().getTime()-60*5*1000).toISOString()
इस प्रकार है:
पहले हम "5 मिनट पहले" की गणना करते हैं:
new Date().getTime()
हमें मिलीसेकंड में वर्तमान समय देता है
- हम उस से 5 मिनट (एमएस में) घटाना चाहते हैं:
5*60*1000
- मैं सिर्फ 60
सेकंड से गुणा करता हूं ताकि इसका बदलना आसान हो। मैं तो बस बदल सकते हैं 5
करने के लिए 120
अगर मैं 2 घंटे (120 मिनट) चाहते हैं।
new Date().getTime()-60*5*1000
हमें देता है 1484383878676
(5 मिनट पहले ms में)
अब हमें यह सुनिश्चित करने की new Date()
आवश्यकता है कि MongoDB टाइमस्टैम्प द्वारा ISO स्ट्रिंग प्रारूप प्राप्त करने के लिए एक निर्माणकर्ता में ।
{ $gte: new Date(resultFromAbove).toISOString() }
(mongodb .find () क्वेरी)
- चूँकि हमारे पास वैरिएबल नहीं हो सकते हैं इसलिए हम यह सब एक शॉट में करते हैं:
new Date(new Date().getTime()-60*5*1000)
- ... तो आईएसओ स्ट्रिंग में परिवर्तित करें:
.toISOString()
new Date(new Date().getTime()-60*5*1000).toISOString()
हमें देता है 2017-01-14T08:53:17.586Z
यदि आप नोड-मोंगोडब-देशी ड्राइवर का उपयोग कर रहे हैं, तो निश्चित रूप से यह चर के साथ थोड़ा आसान है, लेकिन यह मोंगो शेल में काम करता है जो कि मैं आमतौर पर चीजों की जांच करने के लिए उपयोग करता हूं।