Eu tenho dados como este no mongodb
{
"latitude" : "",
"longitude" : "",
"course" : "",
"battery" : "0",
"imei" : "0",
"altitude" : "F:3.82V",
"mcc" : "07",
"mnc" : "007B",
"lac" : "2A83",
"_id" : ObjectId("4f0eb2c406ab6a9d4d000003"),
"createdAt" : ISODate("2012-01-12T20:15:31Z")
}
Como faço para consultar db.gpsdatas.find({'createdAt': ??what here??})
, para que ele me devolva o resultado dos dados acima do banco de dados?
Respostas:
Você provavelmente deseja fazer uma consulta de intervalo, por exemplo, todos os itens criados após uma determinada data:
Estou usando
$gte
(maior ou igual a), porque isso geralmente é usado para consultas somente de data, onde o componente de horário é 00:00:00.Se você realmente deseja encontrar uma data igual a outra data, a sintaxe seria
fonte
ISODate
um wrapper para o objeto js Date. Tente algo parecido"createdAt" : new Date("2010-01-01")
. Por alguma razão, esse código não funciona (para a versão 2.0.2) no console Mongo, no entanto.new Date("2010/01/01");
se você quiser obter itens em qualquer lugar nessa data, precisará comparar duas datas
Você pode criar duas datas fora da primeira assim, para começar o dia e o fim do dia.
fonte
Acabei de implementar algo semelhante no Mongo v3.2.3 usando o Node v0.12.7 e v4.4.4 e usei:
Estou passando um ISODate (por exemplo, 2016-04-22T00: 00: 00Z) e isso funciona para uma consulta .find () com ou sem a função toISOString. Mas ao usar em uma consulta .aggregate () $ match, ela não gosta da função toISOString!
fonte
Se você deseja obter todas as novidades nos últimos 5 minutos, precisará fazer alguns cálculos, mas não é difícil ...
Primeiro, crie um índice na propriedade com a qual você deseja corresponder (inclua a direção de classificação -1 para decrescente e 1 para ascendente)
Em seguida, consulte os documentos criados nos últimos 5 minutos (60 segundos * 5 minutos) .... porque o javascript
.getTime()
retorna milissegundos, você precisa multiplicar por 1000 antes de usá-lo como entrada para onew Date()
construtor.A explicação para
new Date(new Date().getTime()-60*5*1000).toISOString()
é a seguinte:Primeiro, calculamos "5 minutos atrás":
new Date().getTime()
nos fornece o tempo atual em milissegundos5*60*1000
- Simplesmente multiplico por60
segundos para facilitar a alteração. Eu posso mudar5
para120
se quiser 2 horas (120 minutos).new Date().getTime()-60*5*1000
nos dá1484383878676
(5 minutos atrás em ms)Agora precisamos alimentar isso em um
new Date()
construtor para obter o formato de string ISO exigido pelos registros de data e hora do MongoDB.{ $gte: new Date(resultFromAbove).toISOString() }
(consulta mongodb .find ())new Date(new Date().getTime()-60*5*1000)
.toISOString()
new Date(new Date().getTime()-60*5*1000).toISOString()
nos dá2017-01-14T08:53:17.586Z
Claro que isso é um pouco mais fácil com variáveis se você estiver usando o driver node-mongodb-native, mas isso funciona no shell mongo, que é o que eu costumo usar para verificar as coisas.
fonte
Date.now()
vez denew Date().getTime()
Você também pode tentar:
fonte
Se você estiver usando o Mongoose,
fonte
Encontre com uma data específica:
Encontre com maior
gte
ou menorlt
:Localizar por faixa:
fonte