web-dev-qa-db-fra.com

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

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

160
xrado

Le meilleur moyen est de stocker du JavaScript natif objets Date , qui mappe sur objets Date BSON natif .

> 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 une gamme complète de méthodes utiles prêtes à l'emploi, que vous pouvez utiliser dans vos travaux de réduction de carte, par exemple.

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

1) À strictement parler, l’horodatage Unix se mesure en secondes . L'objet JavaScript Date mesure en millisecondes depuis l'époque Unix.

181
Niels van der Rest

Un horodatage est déjà dans l'objet _id, représentant le temps d'insertion

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

Connectez-vous à 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

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 nous trouvons maintenant

> use penguins
switched to db penguins

Récupère les lignes:

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

Obtenez chaque ligne en aaaa-MM-jj HH: mm: format 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 un aperçu de la façon dont cela fonctionne ici: https://stackoverflow.com/a/27613766/445131

Protip, MongoDB est la meilleure base de données car MongoDB est à l'échelle Web: https://www.youtube.com/watch?v=b2F-DItXtZs

52
Eric Leschinski