Tengo una colección como esta:
{ "_id" : ObjectId("963fae9d93f4d930c98e269d"), "myDate":ISODate("2017-02-05T05:00:00.000Z"), "otherData":"blablabla" }, { "_id" : ObjectId("963fae9d93f4d930c98e269d"), "myDate":ISODate("2017-02-05T14:00:00.000Z"), "otherData":"blablabla" }, { "_id" : ObjectId("963fae9d93f4d930c98e269d"), "myDate":ISODate("2017-03-05T02:00:00.000Z"), "otherData":"blablabla" }, { "_id" : ObjectId("963fae9d93f4d930c98e269d"), "myDate":ISODate("2017-03-05T19:00:00.000Z"), "otherData":"blablabla" }Dada la fecha actual (con minutos y segundos), quiero encontrar el registro más cercano a la fecha actual (por el campo "myDate").
Gracias
Puede restar las fechas de su colección con la fecha actual, tomar el valor absoluto de la diferencia para considerar la fecha futura y luego usar ordenar y limitar para obtener el documento más cercano:
db.a.aggregate([ { $project : { myDate : 1, otherData : 1, difference : { $abs : { $subtract : [new Date(), "$myDate"] } } } }, { $sort : {difference : 1} }, { $limit : 1 } ]) Puede usar un $project adicional si desea el campo de difference en el documento de salida. Además, en lugar de la fecha actual, puede usar cualquier otra fecha y encontrar la fecha más cercana a esa fecha.