sql >> Base de Datos >  >> NoSQL >> MongoDB

La consulta de fecha con ISODate en mongodb no parece funcionar

Aunque $date es parte de MongoDB Extended JSON y eso es lo que obtienes por defecto con mongoexport No creo que realmente puedas usarlo como parte de la consulta.

Si prueba la búsqueda exacta con $date como a continuación:

db.foo.find({dt: {"$date": "2012-01-01T15:00:00.000Z"}})

obtendrá un error:

error: { "$err" : "invalid operator: $date", "code" : 10068 }

Prueba esto:

db.mycollection.find({
    "dt" : {"$gte": new Date("2013-10-01T00:00:00.000Z")}
})

o (siguiendo los comentarios de @user3805045):

db.mycollection.find({
    "dt" : {"$gte": ISODate("2013-10-01T00:00:00.000Z")}
})

ISODate también puede ser necesario comparar fechas sin tiempo (señalado por @MattMolnar).

De acuerdo con los tipos de datos en mongo Shell, ambos deberían ser equivalentes:

El shell de mongo proporciona varios métodos para devolver la fecha, ya sea como una cadena o como un objeto de fecha:

  • Método Date() que devuelve la fecha actual como una cadena.
  • nuevo constructor Date() que devuelve un objeto Date utilizando el envoltorio ISODate().
  • Constructor ISODate() que devuelve un objeto Fecha utilizando el envoltorio ISODate().

y usando ISODate aún debería devolver un objeto Fecha.

{"$date": "ISO-8601 string"} se puede usar cuando se requiere una representación JSON estricta. Un posible ejemplo es el conector Hadoop.