66 votes

Comment extraire la date créée d'un identifiant d'objet Mongo

J'utilise le shell Mongo pour interroger ma base de données Mongo. Je souhaite utiliser l'horodatage contenu dans l'ObjectID dans le cadre de ma requête et également en tant que colonne à extraire dans la sortie. J'ai configuré Mongo pour créer ses propres ObjectID.

Mon problème est que je ne peux pas savoir comment utiliser ObjectID pour extraire son horodatage.

Voici les questions que j'essaye de faire fonctionner. Le champ 'createdDate' est un espace réservé; je ne sais pas quel est le bon champ:

 //Find everything created since 1/1/2011
db.myCollection.find({date: {$gt: new Date(2011,1,1)}});

//Find everything and return their createdDates
db.myCollection.find({},{createdDate:1});
 

104voto

Chris Fulstow Points 19762

méthode gettimestamp()

La fonction dont vous avez besoin est de ce type, il est inclus vous déjà dans le shell:

ObjectId.prototype.getTimestamp = function() {
    return new Date(parseInt(this.toString().slice(0,8), 16)*1000);
}

Références

Consultez cette section de la documentation:

Ce test a également demostrates même:

Exemple en utilisant le shell Mongo:

> db.col.insert( { name: "Foo" } );
> var doc = db.col.findOne( { name: "Foo" } );
> var timestamp = doc._id.getTimestamp();

> print(timestamp);
Wed Sep 07 2011 18:37:37 GMT+1000 (AUS Eastern Standard Time)

> printjson(timestamp);
ISODate("2011-09-07T08:37:37Z")

20voto

Stefan Points 836

Cette question est utile de comprendre comment utiliser le _id intégré timestamp dans la requête situations (référence à la Mongo Étendu JSON de la documentation). C'est la façon dont c'est fait:

col.find({..., 
     '_id' : {'$lt' : {'$oid' : '50314b8e9bcf000000000000'}} 
})

trouve les documents créés plus tôt que celui qui est donné par un oid. Utilisé conjointement avec le tri naturel et de limiter vous pouvez utiliser BFILS _ids pour créer Twitter-comme les requêtes API (donnez-moi la dernière OID vous avez et je vais vous donner plus d'une vingtaine d')

5voto

es2 Points 1

En python, vous pouvez faire ceci:

 >>> from bson.objectid import ObjectId
>>> gen_time = datetime.datetime(2010, 1, 1)
>>> dummy_id = ObjectId.from_datetime(gen_time)
>>> result = collection.find({"_id": {"$lt": dummy_id}})
 

Je pense que ObjectId.from_datetime () est une méthode utile de bson lib standard. Peut-être que d'autres liaisons de langage ont une fonction intégrée alternative. Source: http://api.mongodb.org/python/current/api/bson/objectid.html

Prograide.com

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.

Powered by:

X