web-dev-qa-db-fra.com

Comment extraire la date de création d'un Mongo ObjectID

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

Mon problème est que je ne peux pas trouver comment travailler avec l'ObjectID pour extraire son horodatage.

Voici les requêtes que j'essaie de faire fonctionner. Le champ "createdDate" est un espace réservé; Je ne sais pas quel est le champ correct:

//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});
56
emilebaizel

getTimestamp ()

La fonction dont vous avez besoin est celle-ci, elle est déjà incluse pour vous dans le Shell:

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

Les références

Consultez cette section de la documentation:

Ce test unitaire montre également la même chose:

Exemple d'utilisation du Mongo Shell:

> 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")
95
Chris Fulstow

Cette question est utile pour comprendre comment utiliser l'horodatage intégré du _id dans des situations de requête (se réfère à la documentation Mongo Extended JSON ). Voici comment c'est fait:

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

trouve les documents créés plus tôt que celui fourni par oid. Utilisé avec le tri naturel et la limitation, vous pouvez utiliser BSON _ids pour créer des requêtes API de type Twitter ( donnez-moi la dernière OID vous avez et je fournirai vingt de plus )

16
Stefan

Dans 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 () - c'est une méthode utile de lib bson 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

3
es2