![](/img/trans.png)
[英]MongoDB Aggregation Query $match returns nothing with date range, why?
[英]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.