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

Truy vấn object có khoảng thời gian dài nhất trong MongoDB

Tính khoảng thời gian và sắp xếp tìm max với aggregation

Sử dụng $toDate, $subtract, $sort, $limit để tìm document có khoảng thời gian (endDate - startDate) lớn nhất.

Dữ liệu thời gian

> db.demo344.insertOne({"startDate": "2020-02-24 10:50:00", "endDate": "2020-02-24 11:50:00"});
> db.demo344.insertOne({"startDate": "2020-02-24 08:00:00", "endDate": "2020-02-24 11:50:50"});

Pipeline tìm khoảng thời gian dài nhất

> db.demo344.aggregate([
    {
        $addFields: {
            longestTime: {
                $subtract: [
                    { $toDate: "$endDate" },
                    { $toDate: "$startDate" }
                ]
            }
        }
    },
    { $sort: { longestTime: -1 } },
    { $limit: 1 }
]);

Kết quả

{
    "_id": ObjectId("..."),
    "startDate": "2020-02-24 08:00:00",
    "endDate": "2020-02-24 11:50:50",
    "longestTime": NumberLong(13850000)  // milliseconds
}

Giải thích: $toDate chuyển string sang Date (ISODate). $subtract trả về milliseconds. $sort: -1 giảm dần, $limit: 1 lấy top 1.