2011-08-16 5 views
5

私はMongoDBデータベース内のすべてのコレクションを繰り返し処理し、それぞれのコレクションが作成された時刻を取得する必要があります(私はコレクション内の各オブジェクトのタイムスタンプを取得することができますが、より単純な/より速い方法が存在する場合)。MongoDB C#ドライバを使用してMongoDBコレクションを作成した日付を取得するにはどうすればよいですか?

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

答えて

5

私が知る限り、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

「作成日」は、コレクションのメタデータの一部ではありません。

これはあなたに私がやろうとしているかのアイデアを与える必要があります。コレクションは作成時に「認識」しません。いくつかのインデックスは、タイムスタンプを意味するObjectId()を持っていますが、これは一貫性がなく、信頼性がありません。

したがって、私はこれができるとは思わない。

+0

oplogからその情報を取得できませんか? –

+0

oplogは時間がたつにつれて変化するので、作成した瞬間にあなたが見ていなければ、そこにはありません。 –

関連する問題