Meilleure façon de stocker la date / heure dans mongodb

J'ai vu utiliser des chaînes, des horodatages entiers et des objets datetime mongo.

153
demandé sur Dan Dascalescu 2010-09-23 16:38:42

2 réponses

Le meilleur moyen est de stocker des objets JavaScript natifs Date , qui correspondent aux objets Date natifs 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") }

Le type natif prend en charge toute une gamme de méthodes utiles prêtes à l'emploi, que vous pouvez utiliser dans vos tâches map-reduce, par exemple.

Si vous en avez besoin, vous pouvez facilement convertir les objets Date vers et depuis les horodatages Unix1), en utilisant la méthode getTime() et le constructeur Date(milliseconds), respectivement.

1) Strictement parlant, L'horodatage Unix est mesuré en secondes . L'objet Date JavaScript mesure en millisecondes depuis L'époque Unix.

170
répondu Niels van der Rest 2014-02-10 10:52:56

Un datestamp est déjà dans l'objet _id, représentant l'heure d'insertion

Donc, si le temps d'insertion est ce dont vous avez besoin, il est déjà là:

Connexion au 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

Créez votre base de données en insérant des éléments

> db.penguins.insert({"penguin": "skipper"})
> db.penguins.insert({"penguin": "kowalski"})
> 

Faisons de cette base de données celle sur laquelle nous sommes maintenant

> use penguins
switched to db penguins

Récupérer les lignes:

> db.penguins.find()
{ "_id" : ObjectId("5498da1bf83a61f58ef6c6d5"), "penguin" : "skipper" }
{ "_id" : ObjectId("5498da28f83a61f58ef6c6d6"), "penguin" : "kowalski" }

Chaque ligne au format aaaa-MM-jj 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

Si ce dernier one-liner vous confond j'ai une procédure pas à pas sur la façon dont cela fonctionne ici: https://stackoverflow.com/a/27613766/445131

Protip, MongoDB est le meilleur DB car MongoDB est à l'échelle web: https://www.youtube.com/watch?v=b2F-DItXtZs

49
répondu Eric Leschinski 2017-05-23 11:33:24