Risposte:
Il modo migliore è archiviare oggetti Date nativi JavaScript , che vengono mappati su oggetti Date nativi 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") }
Il tipo nativo supporta un'intera gamma di metodi utili pronti all'uso, che è possibile utilizzare, ad esempio, nei lavori di riduzione delle mappe.
Se necessario, è possibile convertire facilmente gli Date
oggetti da e verso i timestamp Unix 1) , utilizzando rispettivamente il getTime()
metodo e il Date(milliseconds)
costruttore.
1) A rigor di termini, il timestamp Unix viene misurato in secondi . L'oggetto JavaScript Date misura in millisecondi dall'epoca di Unix.
389
e 240
sono i millisecondi del timestamp. L' Z
nel formato di stringa dice MongoDB che il timestamp che hai fornito è in UTC. Se poi lo rileggi, l'applicazione probabilmente lo converte nel fuso orario locale , facendo sembrare che l'ora sia cambiata. Ma il tempo è sempre lo stesso, è interpretato solo da una diversa prospettiva del fuso orario. Ad esempio 12:50:42Z
e 13:50:42+01:00
rappresentano lo stesso momento nel tempo.
21:56:03+01:00
ora in CET e si inserisce new Date()
, allora MongoDB potrebbe rappresentarlo come 20:56:03Z
. Ma quando lo rileggi e lo visualizzi nella tua applicazione utilizzando le impostazioni locali del fuso orario (CET), verrà letto di 21:56:03
nuovo.
Quindi, se il tempo di inserimento è quello che ti serve, è già lì:
Accedi alla shell mongodb
ubuntu@ip-10-0-1-223:~$ mongo 10.0.1.223
MongoDB shell version: 2.4.9
connecting to: 10.0.1.223/test
Crea il tuo database inserendo elementi
> db.penguins.insert({"penguin": "skipper"})
> db.penguins.insert({"penguin": "kowalski"})
>
Consente di rendere quel database quello su cui ci troviamo ora
> use penguins
switched to db penguins
Ripristina le righe:
> db.penguins.find()
{ "_id" : ObjectId("5498da1bf83a61f58ef6c6d5"), "penguin" : "skipper" }
{ "_id" : ObjectId("5498da28f83a61f58ef6c6d6"), "penguin" : "kowalski" }
Ottieni ogni riga nel formato aaaa-MM-gg 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 l'ultimo one-liner ti confonde, ho una procedura dettagliata su come funziona qui: https://stackoverflow.com/a/27613766/445131
_id
?
_id.getTimestamp()
.