MongoDB में प्रति-दस्तावेज़ सबसे पुरानी तिथि: $min + $ifNull
एक दस्तावेज़ में कई तिथि फ़ील्ड्स में से सबसे पुरानी (न्यूनतम) तिथि ढूंढने के लिए, $project में $min के साथ सरणी पास करें। $ifNull लापता फ़ील्ड्स को वर्तमान तिथि (या कोई डिफ़ॉल्ट) से बदलता है ताकि वे न्यूनतम गणना को प्रभावित न करें।
नमूना डेटा
> 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.aggregate([
{$project: {
OldestDate: {$min: [
{$ifNull: ["$Date1", new Date()]},
{$ifNull: ["$Date2", new Date()]},
{$ifNull: ["$Date3", new Date()]}
]}
}}
]);
परिणाम
{ "OldestDate": ISODate("2016-01-21T00:00:00Z") } // पहला दस्तावेज़
{ "OldestDate": ISODate("2011-11-20T00:00:00Z") } // दूसरा दस्तावेज़
प्रत्येक दस्तावेज़ के लिए तीन तिथियों में से न्यूनतम लौटाई गई। $ifNull सुनिश्चित करता है कि यदि कोई फ़ील्ड गायब है, तो उसे भविष्य की तिथि (new Date()) माना जाए ताकि वह "सबसे पुरानी" न बने। $min सरणी इनपुट स्वीकार करता है (MongoDB 3.6+)।