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 运算符帮助您提取两个日期的差异