How do I get the date a MongoDB collection was cre

2020-02-14 02:41发布

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())
    });

3条回答
够拽才男人
2楼-- · 2020-02-14 03:04

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.

查看更多
看我几分像从前
3楼-- · 2020-02-14 03:13

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:

public static void CreateCollectionWithMetadata(string collectionName)
{
    var result = _db.CreateCollection(collectionName);
    if (result.Ok)
    {
        var collectionMetadata = _db.GetCollection("collectionMetadata");
        collectionMetadata.Insert(new { Id = collectionName, Created = DateTime.Now });
    }
}

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:

public static DateTime GetCreatedDate(this MongoCollection collection)
{
    var collectionMetadata = _db.GetCollection("collectionMetadata");
    var metadata = collectionMetadata.FindOneById(collection.Name);
    var created = metadata["Created"].AsDateTime;
    return created;
}
查看更多
等我变得足够好
4楼-- · 2020-02-14 03:27

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 the find efficient.

(I using MongoDb 3.6)

查看更多
登录 后发表回答