É possível consultar uma data específica?
Eu descobri no mongo Cookbook que podemos fazer isso para um intervalo de consultas para um intervalo de datas assim:
db.posts.find({"created_on": {"$gte": start, "$lt": end}})
Mas é possível para uma data específica? Isso não funciona:
db.posts.find({"created_on": new Date(2012, 7, 14) })
... 5+ anos mais tarde, eu sugiro fortemente usando data-FNS vez
Para aqueles que usam o Moment.js
Importante: todos os momentos são mutáveis !
tomorrow = today.add(1, 'days')
não funciona, pois também sofre mutaçãotoday
. A chamadamoment(today)
resolve esse problema clonando implicitamentetoday
.fonte
.startOf('day')
vez de .horas (0) .minutos (0) .segundos (0). Portanto, a primeira linha seria:var today = moment().startOf('day')
moment(today)
para clonar o objeto, outra solução é:var tomorrow = today.clone().add(1, 'days')
$lt
:moment(today).endOf('day')
. Para impedir que os resultados reais sejam incluídos no dia seguinte.moment(today).endOf('day')
dá no mesmo dia com o tempo de:23:59:59.999
. Então, na verdade, parece mais correto de usar$lte
, caso contrário, os objetos naquele momento específico serão ignorados.Sim, o objeto Date cumpre a data e a hora, portanto, compará-lo com apenas o valor da data não funciona.
Você pode simplesmente usar o operador $ where para expressar uma condição mais complexa com a expressão booleana Javascript :)
created_on
é o campo datetime e2012-07-14
é a data especificada.A data deve estar exatamente no formato AAAA-MM-DD .
Nota: Use
$where
com moderação, tem implicações no desempenho.fonte
Você tentou:
O problema que você encontrará é que as datas são armazenadas como carimbos de data e hora no Mongo. Portanto, para corresponder a uma data, você está pedindo que corresponda a um carimbo de data e hora. No seu caso, acho que você está tentando combinar um dia (por exemplo, das 00:00 às 23:59 em uma data específica). Se suas datas são armazenadas sem horários, você deve ficar bem. Caso contrário, tente especificar sua data como um intervalo de tempo no mesmo dia (por exemplo, start = 00: 00, end = 23: 59) se o gte não funcionar.
pergunta semelhante
fonte
$gte
vez dissogte
, seria melhor.Você pode usar a seguinte abordagem para o método API para obter resultados de um dia específico:
fonte
Tivemos um problema relacionado a dados duplicados em nosso banco de dados, com um campo de data com vários valores nos quais deveríamos ter 1. Pensei em adicionar a maneira como resolvemos o problema para referência.
Temos uma coleção chamada "dados" com um campo numérico "valor" e um campo de data "data". Tivemos um processo que julgamos idempotente, mas acabamos adicionando 2 x valores por dia na segunda execução:
Precisamos apenas de 1 dos 2 registros, portanto tivemos que recorrer ao javascript para limpar o banco de dados. Nossa abordagem inicial seria iterar os resultados e remover qualquer campo com um tempo entre 6h e 11h (todas as duplicatas eram pela manhã), mas durante a implementação, fizemos uma alteração. Aqui está o script usado para corrigi-lo:
e depois rodou com
mongo thedatabase fixer_script.js
fonte