Respostas:
A melhor maneira é armazenar objetos Date nativos do JavaScript , que são mapeados nos objetos Date nativos do BSON .
> db.test.insert({date: ISODate()})
> db.test.insert({date: new Date()})
> db.test.find()
{ "_id" : ObjectId("..."), "date" : ISODate("2014-02-10T10:50:42.389Z") }
{ "_id" : ObjectId("..."), "date" : ISODate("2014-02-10T10:50:57.240Z") }
O tipo nativo suporta toda uma gama de métodos úteis prontos para uso, que você pode usar nos trabalhos de redução de mapa, por exemplo.
Se necessário, é possível converter facilmente Date
objetos de e para os registros de data e hora do Unix 1) , usando o getTime()
método e o Date(milliseconds)
construtor, respectivamente.
1) Estritamente falando, o carimbo de data e hora do Unix é medido em segundos . O objeto Data JavaScript mede em milissegundos desde a época do Unix.
389
e 240
são os milissegundos do registro de data e hora. O formatoZ
no formato string indica ao MongoDB que o carimbo de data / hora fornecido é no UTC. Se você o ler novamente, seu aplicativo provavelmente o converterá no fuso horário local , fazendo parecer que a hora mudou. Mas o tempo ainda é o mesmo, só é interpretado de uma perspectiva diferente do fuso horário. Por exemplo, 12:50:42Z
e 13:50:42+01:00
representa o mesmo momento no tempo.
21:56:03+01:00
agora no CET e você o insere new Date()
, o MongoDB pode representá- lo como 20:56:03Z
. Mas quando você o ler novamente e exibi-lo no seu aplicativo usando as configurações de fuso horário local (CET), ele será lido 21:56:03
novamente.
Portanto, se o tempo de inserção é o que você precisa, ele já está lá:
Entre no mongodb shell
ubuntu@ip-10-0-1-223:~$ mongo 10.0.1.223
MongoDB shell version: 2.4.9
connecting to: 10.0.1.223/test
Crie seu banco de dados inserindo itens
> db.penguins.insert({"penguin": "skipper"})
> db.penguins.insert({"penguin": "kowalski"})
>
Vamos fazer desse banco de dados o que estamos agora
> use penguins
switched to db penguins
Recupere as linhas:
> db.penguins.find()
{ "_id" : ObjectId("5498da1bf83a61f58ef6c6d5"), "penguin" : "skipper" }
{ "_id" : ObjectId("5498da28f83a61f58ef6c6d6"), "penguin" : "kowalski" }
Obtenha cada linha no formato aaaa-MM-dd HH: mm: ss:
> db.penguins.find().forEach(function (doc){ d = doc._id.getTimestamp(); print(d.getFullYear()+"-"+(d.getMonth()+1)+"-"+d.getDate() + " " + d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds()) })
2014-12-23 3:4:41
2014-12-23 3:4:53
Se esse último one-liner o confundir, tenho uma explicação de como isso funciona aqui: https://stackoverflow.com/a/27613766/445131
_id
?
_id.getTimestamp()
.