繁体   English   中英

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM