¿Es posible consultar una fecha específica?
En el Cookbook de mongo descubrí que podemos hacerlo para un rango Consultando un rango de fechas así:
db.posts.find({"created_on": {"$gte": start, "$lt": end}})
¿Pero es posible para una fecha específica? Esto no funciona:
db.posts.find({"created_on": new Date(2012, 7, 14) })
... más de 5 años más tarde, sugiero usar date-fns en su lugar
Para aquellos de nosotros que usamos Moment.js
Importante: ¡ todos los momentos son mutables !
tomorrow = today.add(1, 'days')
no funciona ya que también mutatoday
. Llamarmoment(today)
resuelve ese problema al clonar implícitamentetoday
.fuente
.startOf('day')
lugar de .hours (0) .minutes (0) .seconds (0). Entonces la primera línea sería:var today = moment().startOf('day')
moment(today)
para clonar el objeto, otra solución es:var tomorrow = today.clone().add(1, 'days')
$lt
:moment(today).endOf('day')
. Para evitar que se incluyan resultados reales del día siguiente.moment(today).endOf('day')
da el mismo día con el momento de:23:59:59.999
. Por lo tanto, parece más correcto de usar$lte
, de lo contrario, los objetos en ese momento en particular se ignorarán.Sí, el objeto Fecha completa la fecha y la hora, por lo que compararlo solo con el valor de la fecha no funciona.
Simplemente puede usar el operador $ where para expresar una condición más compleja con la expresión booleana de Javascript :)
created_on
es el campo de fecha y hora y2012-07-14
es la fecha especificada.La fecha debe estar exactamente en formato AAAA-MM-DD .
Nota: Use con
$where
moderación, tiene implicaciones de rendimiento.fuente
Has probado:
El problema con el que se encontrará es que las fechas se almacenan como marcas de tiempo en Mongo. Entonces, para que coincida con una fecha, le está pidiendo que coincida con una marca de tiempo. En su caso, creo que está tratando de igualar un día (es decir, de 00:00 a 23:59 en una fecha específica). Si sus fechas se almacenan sin horarios, entonces debería estar bien. De lo contrario, intente especificar su fecha como un rango de tiempo en el mismo día (es decir, inicio = 00: 00, final = 23: 59) si gte no funciona.
pregunta similar
fuente
$gte
lugar degte
eso sería mejor.Puede usar el siguiente enfoque para el método API para obtener resultados de un día específico:
fuente
Tuvimos un problema relacionado con los datos duplicados en nuestra base de datos, con un campo de fecha con múltiples valores donde debíamos tener 1. Pensé en agregar la forma en que resolvimos el problema como referencia.
Tenemos una colección llamada "datos" con un campo numérico de "valor" y un campo de fecha "fecha". Tuvimos un proceso que pensamos que era idempotente, pero terminamos agregando 2 valores por día en la segunda ejecución:
Solo necesitamos 1 de los 2 registros, por lo que tuvimos que recurrir al javascript para limpiar la base de datos. Nuestro enfoque inicial sería iterar a través de los resultados y eliminar cualquier campo con un tiempo entre las 6 a.m. y las 11 a.m. (todos los duplicados eran por la mañana), pero durante la implementación, se realizó un cambio. Aquí está la secuencia de comandos utilizada para solucionarlo:
y luego lo ejecuté con
mongo thedatabase fixer_script.js
fuente