Почему $gte и $lte не работают с определенной датой, например «2020/12/09», для получения документов, таких как ISODate («2020-12-09T04:32:37.266Z»)

Что я делаю не так? Я пытаюсь отфильтровать документы, в которых совпадает дата: 2020/12/09

let date= "2020/12/09";
let startDate = new Date(new Date(date).setHours(00, 00, 00));  // output: 2020-12-09T05:00:00.000Z
let endDate = new Date(new Date(date).setHours(23, 59, 59, 999));  //output: 2020-12-10T04:59:59.999Z

let filter= {
  mydate: {
    $gte: startDate,
    $lte: endDate,
  },
};

collection:
[{ "mydate":ISODate("2020-12-09T04:32:37.266Z")}]


collection.aggregate(
 [
  {
    $match: filter
  }
 ]
)

ничего не найдено

Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
0
0
568
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У меня была такая же проблема. Я думаю, что проблема связана с форматом строки даты.

new Date('2020/12/09') --> 2020-12-08T16:00:00.000Z
new Date('2020-12-09') --> 2020-12-09T00:00:00.000Z

Я решил проблему, изменив формат строки даты на гггг-мм-дд и используя метод setUTCHours вместо setHours, так как мне нужно время UTC,

let date = '2020-12-09'
let startDate = new Date(new Date(date).setUTCHours(0, 0, 0, 0)); --> 2020-12-09T00:00:00.000Z
let endDate = new Date(new Date(date).setUTCHours(23, 59, 59, 999)); --> 2020-12-09T23:59:59.999Z

Другие вопросы по теме