MongoDB এগ্রিগেশনে $addFields, $subtract, $toDate, $sort, $limit ব্যবহার করে সর্বোচ্চ সময়কাল বের করা
MongoDB-এ প্রতিটি ডকুমেন্টে শুরু (startDate) এবং শেষ (endDate) সময় থাকলে, সবচেয়ে দীর্ঘ সময়কাল (Duration) वाले ডকুমেন্ট খুঁজে বের করতে এগ্রিগেশন পাইপলাইনে ডেট পার্সিং, গাণিতিক অপারেশন এবং সোর্টিং কম্বাইন করা হয়।
১. কালেকশন ও ডেট ডেটা তৈরি
> db.demo344.insertOne({"startDate":"2020-02-24 10:50:00", "endDate":"2020-02-24 11:50:00"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e53f52cf8647eb59e5620aa") }
> db.demo344.insertOne({"startDate":"2020-02-24 08:00:00", "endDate":"2020-02-24 11:50:50"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e53f53df8647eb59e5620ab") }
২. সব ডকুমেন্ট দেখানো
> db.demo344.find();
আউটপুট:
৩. এগ্রিগেশন কোয়েরি: সর্বোচ্চ সময়কাল वाले ডকুমেন্ট বের করা
> db.demo344.aggregate([ { $addFields: { longestTime: { $subtract: [ { $toDate: "$endDate" }, { $toDate: "$startDate" } ] } }}, { $sort: { longestTime: -1 } }, { $limit: 1 } ])স্টেজ ব্যাখ্যা:
$addFields- নতুন ফিল্ডlongestTimeযোগ করে।$toDateস্ট্রিংকে ডেট অবজেক্টে রূপান্তর করে।$subtractদিয়ে পার্থক্য (মিলিসেকেন্ডে) বের করে।$sort: {longestTime: -1}- সময়কাল ডেসেন্ডিং অর্ডারে সর্ট (সবচেয়ে বড়টি আগে)।$limit: 1- শুধু প্রথম (সর্বোচ্চ) ডকুমেন্ট রিটার্ন।৪. ফলাফল
{ "_id" : ObjectId("5e53f53df8647eb59e5620ab"), "startDate" : "2020-02-24 08:00:00", "endDate" : "2020-02-24 11:50:50", "longestTime" : NumberLong(13850000) }দ্বিতীয় ডকুমেন্টটির সময়কাল: ৩ ঘন্টা ৫০ মিনিট ৫০ সেকেন্ড = ১৩,৮৫০,০০০ মিলিসেকেন্ড। প্রথমটি: ১ ঘন্টা = ৩,৬০০,০০০ মিলিসেকেন্ড।