Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Tìm ngày cũ nhất trong 3 trường ngày MongoDB với $min

So sánh nhiều trường ngày để tìm giá trị nhỏ nhất

Sử dụng $min trong $project aggregation với mảng các trường, kết hợp $ifNull xử lý trường thiếu.

Dữ liệu 3 trường ngày

> db.demo353.insertOne({
    "Date1": new ISODate("2019-01-10"),
    "Date2": new ISODate("2016-01-21"),
    "Date3": new ISODate("2020-04-11")
});
> db.demo353.insertOne({
    "Date1": new ISODate("2011-11-20"),
    "Date2": new ISODate("2013-12-10"),
    "Date3": new ISODate("2014-01-05")
});

Pipeline tìm ngày cũ nhất

> db.demo353.aggregate([
    {
        $project: {
            OldestDate: {
                $min: [
                    { $ifNull: ["$Date1", new Date()] },
                    { $ifNull: ["$Date2", new Date()] },
                    { $ifNull: ["$Date3", new Date()] }
                ]
            }
        }
    }
]);

Kết quả

{ "_id": ObjectId("..."), "OldestDate": ISODate("2016-01-21T00:00:00Z") }
{ "_id": ObjectId("..."), "OldestDate": ISODate("2011-11-20T00:00:00Z") }

Giải thích:

  • $ifNull: ["$Date1", new Date()]: Nếu Date1 null/missing, dùng ngày hiện tại (giá trị lớn, không ảnh hưởng min)
  • $min nhận mảng biểu thức, trả về giá trị nhỏ nhất
  • Kết quả là ISODate object, có thể format thêm với $dateToString