I need to iterate through all of the collections in my MongoDB database and get the time when each of the collections was created (I understand that I could get the timestamp of each object in the collection, but I would rather not go that route if a simpler/faster method exists).
This should give you an idea of what I'm trying to do:
MongoDatabase _database;
// code elided
var result = _database.GetAllCollectionNames().Select(collectionName =>
{
_database.GetCollection( collectionName ) //.{GetCreatedDate())
});
The "creation date" is not part of the collection's metadata. A collection does not "know" when it was created. Some indexes have an
ObjectId()
which implies a timestamp, but this is not consistent and not reliable.Therefore, I don't believe this can be done.
As far as I know, MongoDB doesn't keep track of collection creation dates. However, it's really easy to do this yourself. Add a simple method, something like this, and use it whenever you create a new collection:
Then whenever you need the information just query the
collectionMetadata
collection. Or, if you want to use an extension method like in your example, do something like this:Like Mr. Gates VP say, there is no way using the metadata... but you can get the oldest document in the collection and get it from the _id.
Moreover, you can insert an "empty" document in the collection for that purpose without recurring to maintain another collection.
And it's very easy get the oldest document:
old = db.collection.find({}, {_id}).sort({_id: 1}).limit(1) dat = old._id.getTimestamp()
By default, all collection has an index over
_id
field, making thefind
efficient.(I using MongoDb 3.6)