Фильтр даты и времени работает нормально с операцией find (), но проблемы с $ match с aggregate в mongodb - PullRequest
0 голосов
/ 26 октября 2018

Я строю динамический запрос следующим образом:

           if(DateX && DateY){
                query.createdAt = {
                    $gte: new Date(DateX).toISOString(),
                    $lt : new Date(DateY).toISOString() 
                }

            }else if(DateX){
                query.createdAt = {
                    $gte: new Date(DateX).toISOString() 
                }

            }else if(DateY){
                query.createdAt = {
                    $lt: new Date(DateY).toISOString() 
                }
            }

Здесь мои даты DateX и DateY - даты в формате tz.

Вышеупомянутый запрос работает нормально с find (), как показано ниже, и возвращает желаемые результаты:

Model.find(query).lean().exec();

Но тот же запрос не работает с aggregate.match(query) следующим образом:

Model.aggregate()
            .match(query)
            .exec()

1 Ответ

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

Я пытался преобразовать new Date(DateX) и new Date(DateY) в строку даты и времени в формате ISO, которая здесь не работала.Поскольку new Date() конструктор сам возвращает ISODate с указанной датой.

Я только что удалил .toISOString() из new Date().toISOString(), и он начал работать нормально.

Согласно официальному сообщению mongodbdoc говорит :

  • new Date ("") возвращает ISODate с указанной датой.

  • new Date ("") указывает дату и время в локальном часовом поясе
    клиента и возвращает ISODate с указанным
    значением даты и времени в формате UTC.

  • new Date ("") указывает дату и время вUTC и возвращает ISODate с указанным значением даты / времени в UTC.

  • new Date () указывает дату и время в миллисекундах с начала эпохи Unix (1 января 1970 года) и возвращает полученный ISODate
    экземпляр.

...