我正在为一位牙医创建一个数据库。每周二,秘书都会向所有预约下周的患者发送提醒。
我在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}}
或者类似的东西。任何帮助都将不胜感激!
您可以使用$$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游乐场
如果您使用的是Mongo版本5+,则可以通过使用$dateAdd简化此查询,我只是假设您没有使用这样的高级版本。