Comment obtenir l'horodatage à partir de l'identifiant MongoDB ?
Aussi python : document_id.generation_time
Comment obtenir l'horodatage à partir de l'identifiant MongoDB ?
L'horodatage est contenu dans les 4 premiers octets d'un identifiant mongoDB (voir : http://www.mongodb.org/display/DOCS/Object+IDs ).
Donc votre horodatage est :
timestamp = _id.toString().substring(0,8)
y
date = new Date( parseInt( timestamp, 16 ) * 1000 )
Depuis Mongo 2.2, cela a changé (voir : http://docs.mongodb.org/manual/core/object-id/ )
Vous pouvez faire tout cela en une seule étape à l'intérieur du shell mongo :
document._id.getTimestamp();
Ceci renverra un objet Date.
Le timestamp est enterré profondément dans les entrailles de l'objet mongodb.
Connectez-vous 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"})
>
Vérifiez si elle est là :
> show dbs
local 0.078125GB
penguins 0.203125GB
Faisons en sorte que cette base de données soit celle sur laquelle nous sommes maintenant.
> use penguins
switched to db penguins
Trouvez-vous un ISODate :
> ISODate("2013-03-01")
ISODate("2013-03-01T00:00:00Z")
Imprimez du json :
> printjson({"foo":"bar"})
{ "foo" : "bar" }
Récupérez les rangs :
> db.penguins.find()
{ "_id" : ObjectId("5498da1bf83a61f58ef6c6d5"), "penguin" : "skipper" }
{ "_id" : ObjectId("5498da28f83a61f58ef6c6d6"), "penguin" : "kowalski" }
Nous voulons seulement inspecter une ligne
> db.penguins.findOne()
{ "_id" : ObjectId("5498da1bf83a61f58ef6c6d5"), "penguin" : "skipper" }
Obtenez l'_id de cette ligne :
> db.penguins.findOne()._id
ObjectId("5498da1bf83a61f58ef6c6d5")
Obtenir l'horodatage de l'objet _id :
> db.penguins.findOne()._id.getTimestamp()
ISODate("2014-12-23T02:57:31Z")
Obtenez l'horodatage du dernier enregistrement ajouté :
> db.penguins.find().sort({_id:-1}).limit(1).forEach(function (doc){ print(doc._id.getTimestamp()) })
Tue Dec 23 2014 03:04:53 GMT+0000 (UTC)
Exemple de boucle, impression de chaînes de caractères :
> db.penguins.find().forEach(function (doc){ print("hi") })
hi
hi
Exemple de boucle, même chose que find(), imprimer les lignes
> db.penguins.find().forEach(function (doc){ printjson(doc) })
{ "_id" : ObjectId("5498dbc9f83a61f58ef6c6d7"), "penguin" : "skipper" }
{ "_id" : ObjectId("5498dbd5f83a61f58ef6c6d8"), "penguin" : "kowalski" }
Bouclez, obtenez la date du système :
> db.penguins.find().forEach(function (doc){ doc["timestamp_field"] = new Date(); printjson(doc); })
{
"_id" : ObjectId("5498dbc9f83a61f58ef6c6d7"),
"penguin" : "skipper",
"timestamp_field" : ISODate("2014-12-23T03:15:56.257Z")
}
{
"_id" : ObjectId("5498dbd5f83a61f58ef6c6d8"),
"penguin" : "kowalski",
"timestamp_field" : ISODate("2014-12-23T03:15:56.258Z")
}
Boucle, récupère la date de chaque ligne :
> db.penguins.find().forEach(function (doc){ doc["timestamp_field"] = doc._id.getTimestamp(); printjson(doc); })
{
"_id" : ObjectId("5498dbc9f83a61f58ef6c6d7"),
"penguin" : "skipper",
"timestamp_field" : ISODate("2014-12-23T03:04:41Z")
}
{
"_id" : ObjectId("5498dbd5f83a61f58ef6c6d8"),
"penguin" : "kowalski",
"timestamp_field" : ISODate("2014-12-23T03:04:53Z")
}
Filtrer uniquement les dates
> db.penguins.find().forEach(function (doc){ doc["timestamp_field"] = doc._id.getTimestamp(); printjson(doc["timestamp_field"]); })
ISODate("2014-12-23T03:04:41Z")
ISODate("2014-12-23T03:04:53Z")
Filtrez davantage pour les cordes seulement :
> db.penguins.find().forEach(function (doc){ doc["timestamp_field"] = doc._id.getTimestamp(); print(doc["timestamp_field"]) })
Tue Dec 23 2014 03:04:41 GMT+0000 (UTC)
Tue Dec 23 2014 03:04:53 GMT+0000 (UTC)
Imprimer une date nue, obtenir son type, attribuer une date :
> print(new Date())
Tue Dec 23 2014 03:30:49 GMT+0000 (UTC)
> typeof new Date()
object
> new Date("11/21/2012");
ISODate("2012-11-21T00:00:00Z")
Convertir l'instance de la date en yyyy-MM-dd
> print(d.getFullYear()+"-"+(d.getMonth()+1)+"-"+d.getDate())
2014-1-1
l'obtenir au format aaaa-MM-jj pour chaque ligne :
> db.penguins.find().forEach(function (doc){ d = doc._id.getTimestamp(); print(d.getFullYear()+"-"+(d.getMonth()+1)+"-"+d.getDate()) })
2014-12-23
2014-12-23
le toLocaleDateString est plus court :
> db.penguins.find().forEach(function (doc){ d = doc._id.getTimestamp(); print(d.toLocaleDateString()) })
Tuesday, December 23, 2014
Tuesday, December 23, 2014
Obtenez chaque ligne au format 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
Obtenez la date de la dernière ligne ajoutée :
> db.penguins.find().sort({_id:-1}).limit(1).forEach(function (doc){ print(doc._id.getTimestamp()) })
Tue Dec 23 2014 03:04:53 GMT+0000 (UTC)
Laissez tomber la base de données lorsque vous avez terminé :
> use penguins
switched to db penguins
> db.dropDatabase()
{ "dropped" : "penguins", "ok" : 1 }
Assurez-vous que c'est parti :
> show dbs
local 0.078125GB
test (empty)
Votre MongoDB est maintenant à l'échelle du Web.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
1 votes
Juste pour info, la deuxième réponse devrait probablement être la réponse acceptée. Elle est implémentée dans tout pilote JS qui utilise le pilote JS natif de MongoDB (c'est-à-dire tous ceux que je connais).
0 votes
Je ne suis pas d'accord avec Dropped.on.Caprica, la réponse acceptée ne nécessite pas d'avoir une bibliothèque pour obtenir la date, donc pour moi c'est mieux.
2 votes
Dans mon cas, j'ai dû faire l'analyse de l'horodatage côté client, et non pas là où se trouve le pilote JS pour MongoDB, donc pour moi aussi la réponse actuellement acceptée est la meilleure. Mais il est bon de connaître les *.
getTimestamp
aussi, donc +1 aux deux :)