Estoy tratando de hacer un trabajo cron que sincroniza mis documentos. Debe intentar hacerlo x cantidad de veces, pero solo después de que hayan pasado 2 horas desde el último intento. En cada documento tengo el campo "lastSyncAt" que puedo usar.
{ "_id" : ObjectId("628d8c4ddb65027a2cfd1019"), "calculatedAt" : "", "count" : 0, "createdAt" : "2022-05-25 01:54:21", "lastSyncAt" : "2022-05-25 03:54:21" }¿Cómo debo abordar esto?
¿Debo obtener el valor de lastSyncAt en la canalización y calcular la diferencia entre la fecha actual? ¿Cómo obtengo solo la parte de horas de eso en mi canalización?
¿Debo convertir lastSyncAt en Unix y obtener currentDate en Unix, restarlos y dividirlos por 7200 para ver si es mayor que 2?
¿O debería tomar otro enfoque?
Ni siquiera estoy seguro de qué enfoque tomar. No busco código, sino una idea de cómo manejar esto.
Gracias
Actualización: gracias a @derek-menénedez logré hacerlo funcionar como se muestra a continuación:
[ // 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 } } } ]Puede usar el marco de agregación para lograr las cosas que desea:
https://mongoplayground.net/p/1RzPCYbeHEP
Puede intentar eliminar la proyección en el ejemplo para validar la cantidad de horas.
El operador $dateFromString lo ayuda a crear una fecha a partir de una cadena
El operador $dateDiff lo ayuda a extraer la diferencia de dos fechas