2011-08-16 16 views
5

Muszę przejrzeć wszystkie zbiory w bazie danych MongoDB i uzyskać czas, kiedy każda z kolekcji została utworzona (rozumiem, że mogłem uzyskać znacznik czasu każdego obiektu w kolekcji, ale wolałbym nie iść tą drogą jeżeli istnieje prostsza/szybsza metoda).Jak uzyskać datę utworzenia kolekcji MongoDB przy użyciu sterownika MongoDB C#?

Powinno to daje wyobrażenie o tym, co próbuję zrobić:

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

Odpowiedz

5

O ile wiem, MongoDB nie śledzi dat utworzenia kolekcji. Jednak bardzo łatwo to zrobić samemu. Dodaj prostą metodę, coś takiego i używać go podczas tworzenia nowej kolekcji:

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

Potem ilekroć potrzebujesz informacji tylko kwerendy kolekcji collectionMetadata. Lub, jeśli chcesz użyć metody rozszerzenia, jak w twoim przykładzie, zrób coś takiego:

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

„Data stworzenie” nie jest częścią metadanych kolekcji. Kolekcja nie "wie", kiedy została utworzona. Niektóre indeksy mają wartość ObjectId(), która implikuje znacznik czasu, ale nie jest to spójne i nie jest niezawodne.

Dlatego nie wierzę, że można to zrobić.

+0

czy nie możemy uzyskać tych informacji z oploga? –

+0

Oplog się zmienia z biegiem czasu, więc dopóki nie oglądasz w momencie, w którym został utworzony, po prostu go nie ma. –

Powiązane problemy