![](/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.