Как получить дату создания коллекции MongoDB с помощью драйвера MongoDB C #? - PullRequest
5 голосов
/ 16 августа 2011

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

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

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

Ответы [ 2 ]

5 голосов
/ 17 августа 2011

Насколько я знаю, 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;
}
4 голосов
/ 16 августа 2011

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

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

...