MongoDB находит запрос со сравнением дат (NodeJs)

Я новичок в MongoDB, и я пытался получить запланированные контрольные сообщения в своей коллекции, например, один CM запланирован на сегодня 15 часов, а сейчас 15 часов, по логике я должен сравнить дату, используя $lte (меньше или равно)

запрос:

/*Getting the Date (my schedule is only with hours and minutes)*/

var nowDate = new Date();
nowDate.setSeconds(0);
nowDate.setMilliseconds(0);


/*The Query*/ 
dbo.collection("control_message").find(
            { "status": { $in: [3,4] }},
            {
                $or: [ { schedule:{$exists: false}},{schedule:{date:{ $lte :nowDate}}}]
            }

        )

почему я это спрашиваю?

потому что есть CM (управляющие сообщения), запланированные на 17 часов, хотя сейчас 15 часов, и запрос их получает.

Я напечатал nowDate, чтобы проверить: 2020-12-13T15:33:00.000Z

Назначенное время: 2020-12-13T17:00:00.000Z

тот же запрос в MySQL (работает):

SELECT id_control_message AS control_message_id , app_id, title, body, channel,url_push, img_push, silent, status 
                            FROM control_message 
                            WHERE (status = 3 OR status = 4) 
                            AND (schedule IS NULL OR schedule <= NOW())

Пример документа управляющего сообщения:

{
_id: '5fd3e48eac3f2b3ede0a6a52',
sent_in: {
  date: 2020-12-11T21:28:46.760Z,
  short_date: 2020-12-11T21:28:46.760Z
},
sender_id: 266,
app_id: 190,
message_type_id: 1,
title: '',
body: '',
schedule: {
  date: 2020-12-13T17:00:00.000Z,
  short_date: 2020-12-13T17:00:00.000Z
},
ip: '172.31.55.83',
status: 4
}

вы уверены, потому что 2020-12-13T17:00:00.000Z не меньше, чем 2020-12-13T15:33:00.000Z, поэтому этот документ не вернется в результате, посмотрите на playgorund

turivishal 13.12.2020 18:07

@turivishal Спасибо, чувак, обратил внимание на мелкие детали примера с игровой площадкой, я исправил свой запрос, и теперь он работает: D

Mohamed Ali Nakouri 13.12.2020 18:33
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
106
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Благодаря turivishal , я заметил в примере с игровой площадкой, что он прислал мне, что логика моего запроса была неправильной, так как я не добавил оператор $and, он не возвращал правильные результаты. Не только это, но и указание даты для сравнения с "schedule.date" вместо использования только "schedule" было правильным способом сравнения (в моем случае).

Исправленный запрос:

dbo.collection("control_message").find({
        $and: [
            {"status": { $in: [3,4] }},
            {
                $or: [ { schedule:{$exists: false}},{"schedule.date":{ $lte :nowDate}}]
            }

         ]
          })

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