public void SetupCollection() { var uri = new MongoUrl(ConnectionString); var client = new MongoClient(uri); MongoDatabase db = client.GetServer().GetDatabase(uri.DatabaseName); Int64 cappedSize; if (!Int64.TryParse(CappedSizeInMb, out cappedSize)) { cappedSize = 5 * 1024L; } if (!db.CollectionExists(CollectionName)) { CollectionOptionsBuilder options = CollectionOptions .SetCapped(true) .SetMaxSize(1024L * 1024L * cappedSize); //5 gb. db.CreateCollection(CollectionName, options); } LogCollection = db.GetCollection(CollectionName); var builder = new IndexOptionsBuilder(); const string ttlIndex = FieldNames.Timestamp + "_-1"; var index = LogCollection.GetIndexes().SingleOrDefault(x => x.Name == ttlIndex); if (index != null) { if (ExpireAfter != null) { if (index.TimeToLive != ExpireAfter.ToTimeSpan()) { var d = new CommandDocument() { { "collMod", CollectionName }, { "index", new BsonDocument { { "keyPattern", new BsonDocument { { FieldNames.Timestamp, -1 } } }, { "expireAfterSeconds", (int)(ExpireAfter.ToTimeSpan().TotalSeconds) } } } }; db.RunCommand(d); } } } else { if (ExpireAfter != null) { builder.SetTimeToLive(ExpireAfter.ToTimeSpan()); } LogCollection.CreateIndex(IndexKeys.Descending(FieldNames.Timestamp), builder); } LogCollection.CreateIndex(IndexKeys .Ascending(FieldNames.Level, FieldNames.Thread, FieldNames.Loggername) ); }