Comment puis-je extraire la date créée à partir d'un objet Mongo

j'utilise le shell Mongo pour interroger Mongo db. Je veux utiliser l'horodatage contenu dans L'ObjectID comme partie de ma requête et aussi comme colonne pour extraire en sortie. J'ai configuré Mongo pour créer des objectifs tout seul.

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 placeholder; pas sûr de ce que le bon le champ est:

//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});
50
demandé sur bitek 2011-09-07 03:26:34

3 réponses

méthode gettimestamp()

la fonction dont vous avez besoin est celle-ci, elle est incluse pour 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 des documents:

ce test unitaire démostre également le même:

exemple 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")
88
répondu Chris Fulstow 2011-09-07 08:46:01

cette question est utile pour comprendre comment utiliser l'horodatage intégré de _id dans des situations de requête (se réfère à la documentation Mongo Extended JSON ). C'est comme ça qu'on fait:

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

trouve des documents créés plus tôt que ceux donnés par l'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 le dernier OID vous ont et je vais vous donner plus d'une vingtaine d' )

16
répondu Stefan 2017-05-23 12:09:34

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, ObjectId.from_datetime() - c'est une méthode utile de la norme bfils lib Peut-être que d'autres reliures de langage ont une fonction alternative. Source: http://api.mongodb.org/python/current/api/bson/objectid.html

3
répondu es2 2014-10-09 19:48:49