[英]MongoDB find Query with date comparison ( 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
}
感謝turivishal ,我在他發給我的操場示例中注意到我的查詢邏輯是錯誤的,因為我沒有添加$and
運算符,它沒有返回正確的結果。 不僅如此,而且指定與"schedule.date"
比較的日期而不是僅使用"schedule"
是比較的正確方法(在我的情況下)
更正后的查詢:
dbo.collection("control_message").find({
$and: [
{"status": { $in: [3,4] }},
{
$or: [ { schedule:{$exists: false}},{"schedule.date":{ $lte :nowDate}}]
}
]
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.