Как узнать дату создания коллекции MongoDB с помощью драйвера MongoDB C#?



Мне нужно перебрать все коллекции в моей базе данных MongoDB и получить время, когда каждая из коллекций была создана (я понимаю, что я мог бы получить метку времени каждого объекта в коллекции, но я предпочел бы не идти этим путем, если существует более простой/быстрый метод).



Это должно дать вам представление о том, что я пытаюсь сделать:

MongoDatabase _database;
// code elided
var result = _database.GetAllCollectionNames().Select(collectionName =>
{
_database.GetCollection( collectionName ) //.{GetCreatedDate())
});
586   2  

2 ответов:

Насколько мне известно, MongoDB не отслеживает даты создания коллекций. Тем не менее, это действительно легко сделать самостоятельно. Добавьте простой метод, что-то вроде этого, и используйте его всякий раз, когда вы создаете новую коллекцию:

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

Затем, когда вам понадобится информация, просто запросите коллекцию collectionMetadata. Или, если вы хотите использовать метод расширения, как в вашем примере, сделайте что-то вроде этого:

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

"Дата создания" не является частью метаданных коллекции. Коллекция не "знает", когда она была создана. Некоторые индексы имеют ObjectId(), что подразумевает временную метку, но это не согласуется и не является надежным.

Поэтому я не верю, что это можно сделать.

Comments

    Ничего не найдено.