MongoDB এগ্রিগেশনে $project, $min, $ifNull ব্যবহার করে একাধিক ডেট ফিল্ড থেকে সর্বোচ্চ পুরানো ডেট বের করা
MongoDB-এ একটি ডকুমেন্টে একাধিক ডেট ফিল্ড (Date1, Date2, Date3) থাকলে, সেগুলোর মধ্যে সবচেয়ে পুরানো (Oldest/Minimum) ডেট বের করতে এগ্রিগেশন পাইপলাইনে $min অপারেটর অ্যারে ফরম্যাটে ব্যবহার করা হয়।
১. কালেকশন ও ISODate ডেটা তৈরি
> db.demo353.insertOne({"Date1":new ISODate("2019-01-10"),"Date2":new ISODate("2016-01-21"),"Date3":new ISODate("2020-04-11")});
{ "acknowledged" : true, "insertedId" : ObjectId("5e568261f8647eb59e5620be") }
> db.demo353.insertOne({"Date1":new ISODate("2011-11-20"),"Date2":new ISODate("2013-12-10"),"Date3":new ISODate("2014-01-05")});
{ "acknowledged" : true, "insertedId" : ObjectId("5e56827ff8647eb59e5620bf") }
২. সব ডকুমেন্ট দেখানো
> db.demo353.find();
আউটপুট:
৩. এগ্রিগেশন কোয়েরি: তিনটি ডেটের মধ্যে Oldest (Minimum) বের করা
> db.demo353.aggregate([ { $project: { OldestDate: { $min: [ { $ifNull: ["$Date1", new Date()] }, { $ifNull: ["$Date2", new Date()] }, { $ifNull: ["$Date3", new Date()] } ]} }} ])ব্যাখ্যা:
$min: [ ... ]- অ্যারে-র সব এলিমেন্ট থেকে ন্যূনতম (সবচেয়ে পুরানো) ডেট বের করে।$ifNull: ["$Date1", new Date()]- Date1 ফিল্ড না থাকলে (null/missing) বর্তমান ডেট দিয়ে রিপ্লেস করে, যাতে $min এরর না দেয়।- ISODate অবজেক্ট থাকলে সরাসরি তুলনা হয়।
৪. ফলাফল
প্রথম ডকুমেন্টে: 2016-01-21 (Date2) সবচেয়ে পুরানো। দ্বিতীয় ডকুমেন্টে: 2011-11-20 (Date1) সবচেয়ে পুরানো। এটি নাল হ্যান্ডলিং সহ রবাস্ট সমাধান।