【问题标题】:MongoDB - How to get a date that is between two datesMongoDB - 如何获取两个日期之间的日期
【发布时间】:2022-01-06 06:59:06
【问题描述】:

我正在为牙医创建一个数据库。周二,秘书会向所有预约下周的患者发送提醒。

我在 SQL 中使用的查询是:

SELECT P.Name    
    , P.Tel_No    
    , A.Appointment_Time    
    , A.Appointment_Date    
FROM Patient AS P    
    INNER JOIN Booking AS B ON P.Patient_ID = B.Patient_ID    
    INNER JOIN Appointment AS A ON B.Appointment_ID = A.Appointment_ID    
WHERE A.Reminder_Sent = 0  
AND A.Appointment_Date BETWEEN     
    ADDDATE(DAY, 6, CURDATE()) AND ADDDATE(DAY, 9, CURDATE());

我想遵循与最后两行相同的逻辑。所以周二加 6 天是下周一,周二加 9 天是下周五。如果约会在这两个日期之间,则会发送提醒。

如何将此逻辑扩展到 MongoDB?

我想它会是这样的:

"Appointment Time" : $range{

{$dateAdd:{currentdate(),unit:day,amount:6}, 

{$dateAdd:{currentdate(),unit:day,amount:9}}

或者类似的东西。任何帮助将不胜感激!

【问题讨论】:

  • 此类查询称为“日期范围查询”。 MongoDB手册中有这样的同名示例

标签: mongodb mongodb-query nosql nosql-aggregation


【解决方案1】:

您可以使用$$NOW 变量,如下所示:

db.collection.aggregate([
  {
    $match: {
      $expr: {
        $and: [
          {
            $gt: [
              "$Appointment_Date",
              {
                $add: [
                  "$$NOW",
                  518400000 // 6 days in miliseconds
                ]
              }
            ]
          },
          {
            $lt: [
              "$Appointment_Date",
              {
                $add: [
                  "$$NOW",
                  777600000 // 9 days in miliseconds
                ]
              }
            ]
          }
        ]
      }
    }
  }
])

Mongo Playground

如果您使用的是 Mongo 版本 5+,则可以使用 $dateAdd 简化此查询,我只是假设您没有使用如此高级的版本。

【讨论】:

    猜你喜欢
    • 2018-01-11
    • 1970-01-01
    • 2020-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 2019-05-07
    • 2010-10-05
    相关资源
    最近更新 更多