Сравнение трех дат, чтобы получить последние в MongoDB - PullRequest
0 голосов
/ 19 октября 2018

В моей коллекции Монго мне нужно сравнить три даты и найти самую последнюю.Мне интересно, есть ли для этого краткий или собственный способ MongoDB?

При сравнении двух дат в ванильном JS я мог бы что-то вроде:

let compareDates = (date1, date2) => {
   if (date1>date2) return ("Date1 > Date2");
   else if (date1<date2) return ("Date2 > Date1");
   else return ("Date1 = Date2"); 
  }

console.log(compare_dates(new Date('11/14/2018 00:00'), new Date('11/14/2018 00:00')));
console.log(compare_dates(new Date('11/14/2018 00:01'), new Date('11/14/2018 00:00')));
console.log(compare_dates(new Date('11/14/2018 00:00'), new Date('11/14/2018 00:01')));

... ноэто будет долго с тремя датами.Есть ли более короткий способ сравнить три даты и вернуть самую последнюю дату?

Давайте предположим упрощенную модель, подобную этой:

{
    _id: '123',
    date1: {
      type: Date,
    },
    date2: {
      type: Date,
    },
    date3: {
      type: Date,
    }
}

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Просто для добавления некоторых решений POJS Math.max работает, но возвращает значение времени.Также можно отсортировать их в массив и получить последний:

var dates = [
  new Date('2018-01-01'),
  new Date('2018-01-03'),
  new Date('2018-01-02') 
];

// Returns a new Date
console.log(new Date(Math.max(...dates)));

// Returns one of the dates, sorts and shortens the array
console.log(dates.sort((a,b)=>a-b).pop()); 

// Returns a reference to one of the dates, sorts but doesn't shorten the array
console.log(dates.sort((a,b)=>a-b).slice(-1)[0]);



  
0 голосов
/ 19 октября 2018

Предполагается, что ваша модель выглядит следующим образом:

{
    date1: ISODate("1990-01-01T00:00:00Z"),
    date2: ISODate("1980-01-01T00:00:00Z"),
    date3: ISODate("1970-01-01T00:00:00Z")
}

Вы можете просто использовать $ max , чтобы получить недавнюю дату:

db.collection.aggregate([
    {
        $project: {
            recentDate: { $max: [ "$date1", "$date2", "$date3" ] }
        }
    }
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...