簡體   English   中英

MongoDB 查找帶有日期比較的查詢(NodeJs)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM