2011-08-16 3 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가 순환하므로 생성 된 순간을 보지 못하면 그냥 존재하지 않습니다. –

관련 문제