2011-08-16 31 views
5

Necesito iterar a través de todas las colecciones en mi base de datos MongoDB y obtener la hora en que se creó cada una de las colecciones (entiendo que podría obtener la marca de tiempo de cada objeto en la colección, pero prefiero no seguir esa ruta si existe un método más simple/más rápido).¿Cómo obtengo la fecha en que se creó una colección MongoDB utilizando el controlador MongoDB C#?

Esto debe darle una idea de lo que estoy tratando de hacer:

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

Respuesta

5

Hasta donde yo sé, MongoDB no realiza un seguimiento de las fechas de creación de la colección. Sin embargo, es muy fácil hacerlo tú mismo. Añadir un método sencillo, algo como esto, y lo utilizan cuando se crea una nueva colección:

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

Entonces cada vez que necesite la información que acaba consultar la colección collectionMetadata. O bien, si desea utilizar un método de extensión como en su ejemplo, haga algo como esto:

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

La "fecha de creación" no es parte de los metadatos de la colección. Una colección no "sabe" cuando fue creada. Algunos índices tienen un ObjectId() que implica una marca de tiempo, pero esto no es consistente y no es confiable.

Por lo tanto, no creo que esto se pueda hacer.

+0

¿No podemos obtener esa información del oplog? –

+0

El oplog cicla con el tiempo, por lo tanto, a menos que lo vea en el momento en que se creó, simplemente no está allí. –

Cuestiones relacionadas