Estoy tratando de realizar una consulta de rango de fechas en el campo _id usando la brújula. Probé lo que encontré aquí con el siguiente filtro:
{_id: { $gte: ObjectId.fromDate(new Date('2019-01-01')) } }¿Qué me estoy perdiendo? Me gustaría obtener una lista de todos los documentos desde una fecha en adelante (en este ejemplo, desde el 1 de enero de 2019 hasta el presente). Desafortunadamente, no hay una marca de tiempo en los campos del documento, por lo que necesito extraerla de la identificación del objeto.
Debe pasar un objeto de fecha a ObjectId.fromDate , no una cadena. Prueba esto:
ObjectId.fromDate(new Date('2019-01-01'))Esta función funciona solo en el shell y no existe en los controladores.
Aquí hay una solución que también funciona en Compass:
{ $expr: { $gte: [ {"$toDate":"$_id"}, ISODate("2021-01-01T00:00:00.000Z") ] } } Tenga en cuenta, sin embargo, que requiere una versión de mongo de 4.0+ . Puede consultar los documentos aquí .
Además, consulte este tema relacionado: ¿Puedo consultar MongoDB ObjectId por fecha?
No se trata de Compass , pero proporciona soluciones para generar ObjectId a partir de una fecha sin depender de ObjectId.fromDate() .
Encontré una solución, tal vez no la mejor, pero hace el trabajo. Con suerte, esto puede ayudar a alguien con el mismo problema si no hay una solución más limpia.
Convertí la fecha que necesitaba en un ObjectId fuera de Compass en línea aquí . Luego escribí la consulta con ese ObjectId:
{_id: { $gte: ObjectId(' object id here ') } } Como se sugiere en los comentarios, vea este tema relacionado . No es específico de Compass , pero proporciona una solución para generar ObjectId a partir de una fecha sin depender de ObjectId.fromDate() .