Mongodb $ gte запрос даты не работает должным образом - PullRequest
0 голосов
/ 06 июля 2018

У меня есть коллекция с данными ниже. Пока я использую

db.collection.find({ endDate: { $gte: new Date() } })

это не показывает результат текущей даты, которая ISODate("2018-07-06T14:59:08.794+0000").

{ 
    "_id" : "GMDJcQMfs8j8EP9EE", 
    "endDate" : ISODate("2018-07-06T14:59:08.794+0000")
}
{ 
    "_id" : "GMDJcQMfs12233", 
    "endDate" : ISODate("2020-02-21T00:00:00.000+0000")
}
{ 
    "_id" : "GMDJerrr8j8EP9EE", 
    "endDate" : ISODate("2020-02-21T00:00:00.000+0000")
}
{ 
    "_id" : "rrrJcQMfs8j8EP9EE", 
    "endDate" : ISODate("2020-02-21T00:00:00.000+0000")
}

Ответы [ 3 ]

0 голосов
/ 06 июля 2018

Вы должны учитывать время суток. Вы можете установить часы, минуты, секунды и миллисекунды запрошенной даты на ноль.

var date = new Date()
date.setHours(0, 0, 0, 0)
db.collection.find({ endDate: { $gte: date } })

Теперь будут возвращены все записи, заканчивающиеся сегодня и позже.

0 голосов
/ 06 июля 2018

Хорошо, я вернусь к моему ответу на ваш предыдущий вопрос и объясню:

db.test1.aggregate(
    [
        {
            $project: {
                endDate:1,
                endDateFormatted:{$dateToString: {date:"$endDate",format:"%Y-%m-%d"}},
                current:{$dateToString: {date:new Date(),format:"%Y-%m-%d"}}
            }
        },
        {
            $project: {  ab: {$cmp: ['$endDateFormatted','$current']},endDate:1}
        },
        {
            $match: {ab:{$eq:1}}  // <= note de difference with your previous question
        },
        {
        $project: {
           endDate:1
        }
    },
    ]
);

Пояснения:

  • $ dateToString преобразует предоставленную дату ISO в предоставленный формат, т.е.

{$ dateToString: {date: ISODate ("2020-02-21T00: 00: 00.000 + 0000"), формат: "% Y-% m-% d"}} выводит "2020-02-01"

  • $ cmp сравнить первое значение A со вторым B со следующим результатом:

    • A -1
    • A = B => 0
    • A> B => 1

просто адаптируйте ab-критерии к тому, что вам нужно ({$ eq: 1} для будущих дат, {$ eq: -1} для прошлых дат, {$ eq: 0} для текущей даты, {$ ne: 0} для не сегодня даты и т.д ...)

0 голосов
/ 06 июля 2018

Указанное вами условие - $ gte, а дата, на которую вы передаете условие, - newDate ().

print(new Date()) - Execute this command in Mongo shell it Should be giving you the current date

My Console output

Fri Jul 06 2018 14:28:54 GMT+0530 (India Standard Time)

Если ваша дата также 06 июля 2018 года, вы также не получите 05 июля 2018 года в ваших результатах

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...