MongoDB एग्रीगेशन में $hour ऑपरेटर का उपयोग करके घंटे के आधार पर फ़िल्टर करना
$hour एग्रीगेशन ऑपरेटर एक तिथि से घंटा घटक (0-23) निकालता है। $match के साथ संयोजित करके विशिष्ट घंटों के दौरान होने वाले डॉक्यूमेंट्स को फ़िल्टर करें।
नमूना डेटा बनाना
> db.mongoDbSearchForHoursDemo.insertOne({"CustomerName":"Larry","OrderDatetime":new ISODate("2019-01-31 09:45:50")});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd6e8a86d78f205348bc62a") }
> db.mongoDbSearchForHoursDemo.insertOne({"CustomerName":"Larry","OrderDatetime":new ISODate("2019-02-21 01:10:01")});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd6e8b86d78f205348bc62b") }
> db.mongoDbSearchForHoursDemo.insertOne({"CustomerName":"Larry","OrderDatetime":new ISODate("2019-04-01 04:10:11")});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd6e8e26d78f205348bc62c") }
> db.mongoDbSearchForHoursDemo.insertOne({"CustomerName":"Larry","OrderDatetime":new ISODate("2019-05-11 08:53:01")});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd6e8f26d78f205348bc62d") }
सभी डॉक्यूमेंट्स देखना
> db.mongoDbSearchForHoursDemo.find().pretty();
आउटपुट:
{ "_id" : ObjectId("5cd6e8a86d78f205348bc62a"), "CustomerName" : "Larry", "OrderDatetime" : ISODate("2019-01-31T09:45:50Z") }
{ "_id" : ObjectId("5cd6e8b86d78f205348bc62b"), "CustomerName" : "Larry", "OrderDatetime" : ISODate("2019-02-21T01:10:01Z") }
{ "_id" : ObjectId("5cd6e8e26d78f205348bc62c"), "CustomerName" : "Larry", "OrderDatetime" : ISODate("2019-04-01T04:10:11Z") }
{ "_id" : ObjectId("5cd6e8f26d78f205348bc62d"), "CustomerName" : "Larry", "OrderDatetime" : ISODate("2019-05-11T08:53:01Z") }
घंटे 1 और 8 के लिए रिकॉर्ड्स क्वेरी करना
> db.mongoDbSearchForHoursDemo.aggregate([
{ $project: { SpecificHours: { $hour: "$OrderDatetime" } } },
{ $match: { SpecificHours: { "$in": [8, 1] } } }
]);
आउटपुट:
{ "_id" : ObjectId("5cd6e8b86d78f205348bc62b"), "SpecificHours" : 1 }
{ "_id" : ObjectId("5cd6e8f26d78f205348bc62d"), "SpecificHours" : 8 }
व्याख्या
$projectके साथ$hour-OrderDatetimeसे घंटा निकालता है एक नए फील्डSpecificHoursमें।$matchके साथ$in: [8, 1]- उन डॉक्यूमेंट्स को फ़िल्टर करता है जहां निकाला गया घंटा 8 या 1 है।- परिणाम में केवल निकाले गए घंटे के साथ प्रोजेक्टेड फील्ड्स शामिल हैं।
मूल फील्ड्स को बनाए रखने के लिए
db.collection.aggregate([
{ $addFields: { hour: { $hour: "$OrderDatetime" } } },
{ $match: { hour: { $in: [8, 1] } } }
]);
अन्य तिथि घटक ऑपरेटर्स
| ऑपरेटर | रिटर्न्स |
|---|---|
$year | वर्ष (उदाहरण के लिए, 2019) |
$month | महीना (1-12) |
$dayOfMonth | महीने का दिन (1-31) |
$hour | घंटा (0-23) |
$minute | मिनट (0-59) |
$second | सेकंड (0-59) |
$dayOfWeek | सप्ताह का दिन (1=रविवार, 7=शनिवार) |
प्रदर्शन नोट
एग्रीगेशन में $hour (या अन्य तिथि ऑपरेटर्स) का उपयोग करने के लिए पूर्ण संग्रह स्कैन की आवश्यकता होती है जब तक कि आप तिथि फील्ड पर इंडेक्स के साथ $match का उपयोग पहले तिथि सीमा को संकीर्ण करने के लिए नहीं करते।