Mongodb按日期差异聚合查询
Mongodb aggregation query by date difference
我正在尝试做一个 cron 作业来同步我的文档。它应该尝试执行 x 次,但只能在自上次尝试后 2 小时后执行。在每个文档上,我都有可以使用的“lastSyncAt”字段。
{
"_id" : ObjectId("628d8c4ddb65027a2cfd1019"),
"calculatedAt" : "",
"count" : 0,
"createdAt" : "2022-05-25 01:54:21",
"lastSyncAt" : "2022-05-25 03:54:21"
}
我该如何处理?
我是否应该获取管道中的 lastSyncAt 值并计算 currentDate 之间的差异?如何在我的管道中只获取其中的小时部分?
我是否应该将 lastSyncAt 转换成 unix 并在 unix 中获取 currentDate 减去它们并除以 7200 看它是否大于 2?
或者我应该采取另一种方法吗?
我什至不确定该采取什么方法。不是在寻找代码,而是在寻找如何处理这个问题的想法。
感谢
更新:
感谢@derek-menénedez,我设法让它工作,如下所示:
[
// Stage 1
{
$addFields: {
lastSyncAt: {
$dateDiff: {
startDate: {$dateFromString: {
dateString: "$lastSyncAt",
timezone: "Europe/Zagreb"
}},
endDate: "$$NOW",
unit: "minute",
timezone: "Europe/Zagreb"
}
}
}
},
// Stage 2
{
$match: {
lastSyncAt: {
$gt: 120
}
}
}
]
你可以使用聚合框架来实现你想要的东西:
https://mongoplayground.net/p/1RzPCYbeHEP
您可以尝试移除示例中的投影以验证小时数。
$dateFromString 运算符帮助您从字符串创建日期
$dateDiff 运算符帮助您提取两个日期的差异
我正在尝试做一个 cron 作业来同步我的文档。它应该尝试执行 x 次,但只能在自上次尝试后 2 小时后执行。在每个文档上,我都有可以使用的“lastSyncAt”字段。
{
"_id" : ObjectId("628d8c4ddb65027a2cfd1019"),
"calculatedAt" : "",
"count" : 0,
"createdAt" : "2022-05-25 01:54:21",
"lastSyncAt" : "2022-05-25 03:54:21"
}
我该如何处理?
我是否应该获取管道中的 lastSyncAt 值并计算 currentDate 之间的差异?如何在我的管道中只获取其中的小时部分?
我是否应该将 lastSyncAt 转换成 unix 并在 unix 中获取 currentDate 减去它们并除以 7200 看它是否大于 2?
或者我应该采取另一种方法吗?
我什至不确定该采取什么方法。不是在寻找代码,而是在寻找如何处理这个问题的想法。
感谢
更新: 感谢@derek-menénedez,我设法让它工作,如下所示:
[
// Stage 1
{
$addFields: {
lastSyncAt: {
$dateDiff: {
startDate: {$dateFromString: {
dateString: "$lastSyncAt",
timezone: "Europe/Zagreb"
}},
endDate: "$$NOW",
unit: "minute",
timezone: "Europe/Zagreb"
}
}
}
},
// Stage 2
{
$match: {
lastSyncAt: {
$gt: 120
}
}
}
]
你可以使用聚合框架来实现你想要的东西:
https://mongoplayground.net/p/1RzPCYbeHEP
您可以尝试移除示例中的投影以验证小时数。
$dateFromString 运算符帮助您从字符串创建日期
$dateDiff 运算符帮助您提取两个日期的差异