Я новичок в 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
}
@turivishal Спасибо, чувак, обратил внимание на мелкие детали примера с игровой площадкой, я исправил свой запрос, и теперь он работает: D
Благодаря turivishal , я заметил в примере с игровой площадкой, что он прислал мне, что логика моего запроса была неправильной, так как я не добавил оператор $and
, он не возвращал правильные результаты.
Не только это, но и указание даты для сравнения с "schedule.date"
вместо использования только "schedule"
было правильным способом сравнения (в моем случае).
Исправленный запрос:
dbo.collection("control_message").find({
$and: [
{"status": { $in: [3,4] }},
{
$or: [ { schedule:{$exists: false}},{"schedule.date":{ $lte :nowDate}}]
}
]
})
вы уверены, потому что
2020-12-13T17:00:00.000Z
не меньше, чем2020-12-13T15:33:00.000Z
, поэтому этот документ не вернется в результате, посмотрите на playgorund