Как узнать дату создания коллекции MongoDB с помощью драйвера MongoDB C#?
Мне нужно перебрать все коллекции в моей базе данных MongoDB и получить время, когда каждая из коллекций была создана (я понимаю, что я мог бы получить метку времени каждого объекта в коллекции, но я предпочел бы не идти этим путем, если существует более простой/быстрый метод).
Это должно дать вам представление о том, что я пытаюсь сделать:
MongoDatabase _database;
// code elided
var result = _database.GetAllCollectionNames().Select(collectionName =>
{
_database.GetCollection( collectionName ) //.{GetCreatedDate())
});
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