MongoDB में तिथि सीमा द्वारा उपयोगकर्ता लॉगिन गिनना
$gte (ग्रेटर दैन इक्वल) और $lt` (कम दैन) ऑपरेटर्स के साथ count() का उपयोग करके एक विशिष्ट तिथि सीमा के भीतर आने वाले डॉक्यूमेंट्स को गिनें।
नमूना डेटा बनाना
> db.findDataByDateDemo.insertOne({"UserName":"John","UserLoginDate":new ISODate("2019-01-31")});
{ "acknowledged" : true, "insertedId" : ObjectId("5cdd8cd7bf3115999ed511ed") }
> db.findDataByDateDemo.insertOne({"UserName":"Larry","UserLoginDate":new ISODate("2019-02-01")});
{ "acknowledged" : true, "insertedId" : ObjectId("5cdd8ce7bf3115999ed511ee") }
> db.findDataByDateDemo.insertOne({"UserName":"Sam","UserLoginDate":new ISODate("2019-05-02")});
{ "acknowledged" : true, "insertedId" : ObjectId("5cdd8cf3bf3115999ed511ef") }
> db.findDataByDateDemo.insertOne({"UserName":"David","UserLoginDate":new ISODate("2019-05-16")});
{ "acknowledged" : true, "insertedId" : ObjectId("5cdd8d00bf3115999ed511f0") }
> db.findDataByDateDemo.insertOne({"UserName":"Carol","UserLoginDate":new ISODate("2019-10-19")});
{ "acknowledged" : true, "insertedId" : ObjectId("5cdd8d0ebf3115999ed511f1") }
सभी डॉक्यूमेंट्स देखना
> db.findDataByDateDemo.find();
आउटपुट:
{ "_id" : ObjectId("5cdd8cd7bf3115999ed511ed"), "UserName" : "John", "UserLoginDate" : ISODate("2019-01-31T00:00:00Z") }
{ "_id" : ObjectId("5cdd8ce7bf3115999ed511ee"), "UserName" : "Larry", "UserLoginDate" : ISODate("2019-02-01T00:00:00Z") }
{ "_id" : ObjectId("5cdd8cf3bf3115999ed511ef"), "UserName" : "Sam", "UserLoginDate" : ISODate("2019-05-02T00:00:00Z") }
{ "_id" : ObjectId("5cdd8d00bf3115999ed511f0"), "UserName" : "David", "UserLoginDate" : ISODate("2019-05-16T00:00:00Z") }
{ "_id" : ObjectId("5cdd8d0ebf3115999ed511f1"), "UserName" : "Carol", "UserLoginDate" : ISODate("2019-10-19T00:00:00Z") }
तिथि सीमा में लॉगिन गिनना (2 मई से 18 मई 2019)
> db.findDataByDateDemo.count({
"UserLoginDate": {
"$gte": new Date("2019-05-02"),
"$lt": new Date("2019-05-18")
}
});
आउटपुट:
2
व्याख्या
$gte: new Date("2019-05-02")- 2 मई 2019 00:00:00 UTC पर या उसके बाद।$lt: new Date("2019-05-18")- 18 मई 2019 00:00:00 UTC से सख्ती से पहले (यानी, 17 मई तक)।- मिलान: Sam (2 मई) और David (16 मई) = 2 उपयोगकर्ता।
सर्वोत्तम अभ्यास
- समावेशी प्रारंभ, अनन्य अंत पैटर्न (
$gte+$lt) का उपयोग करें ताकि सीमाओं पर डबल-काउंटिंग से बचा जा सके। UserLoginDateपर इंडेक्स बनाएं ताकि बड़े कलेक्शन पर तिथि सीमा क्वेरी तेज हो।- MongoDB 4.0.3+ में
count()के बजायcountDocuments()का उपयोग करें (अप्रचलित)। - एग्रीगेशन के लिए,
$match+$countस्टेज का उपयोग करें।
एग्रीगेशन विकल्प
db.findDataByDateDemo.aggregate([
{ $match: { UserLoginDate: { $gte: new Date("2019-05-02"), $lt: new Date("2019-05-18") } } },
{ $count: "loginCount" }
]);