2011-08-16 20 views
5

Ho bisogno di scorrere tutte le raccolte nel mio database MongoDB e ottenere il tempo in cui ciascuna delle raccolte è stata creata (capisco che potrei ottenere il timestamp di ciascun oggetto nella raccolta, ma preferirei non seguire quella strada se esiste un metodo più semplice/veloce).Come posso ottenere la data in cui è stata creata una raccolta MongoDB utilizzando il driver MongoDB C#?

Questo dovrebbe dare un'idea di quello che sto cercando di fare:

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

risposta

5

Per quanto ne so, MongoDB non tiene traccia delle date di creazione della raccolta. Tuttavia, è davvero facile farlo da soli. Aggiungere un metodo semplice, qualcosa di simile, e usarlo ogni volta che si crea una nuova collezione:

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

Poi ogni volta che avete bisogno di informazioni basta interrogare la collezione collectionMetadata. Oppure, se vuoi utilizzare un metodo di estensione come nell'esempio, fai qualcosa di simile a questo:

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 "data di creazione" non fa parte dei metadati della collezione. Una collezione non "sa" quando è stata creata. Alcuni indici hanno uno ObjectId() che implica un timestamp, ma questo non è coerente e non affidabile.

Pertanto, non credo che questo possa essere fatto.

+0

non possiamo ottenere quelle informazioni dall'oplog? –

+0

L'oplog va in bicicletta nel tempo, quindi, a meno che non ti capiti di guardare al momento della creazione, non è lì. –

Problemi correlati