2011-08-16 67 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隨着時間的推移而循環,所以除非您剛好在創建時看到它,否則它就不在那裏。 –

相關問題