2012-07-03 12 views
8

Uso del controlador de C# MongoDB, que actualmente creamos nuestra colección de este modo:Creación de una colección de cubiertas mongodb usando C# API

MongoServer mongoServer = MongoServer.Create("some conn str"); 
MongoDatabase db = mongoServer.GetDatabase("mydb"); 
MongoCollection logs = db.GetCollection("mycoll"); 

me gustaría utilizar mycoll como una colección tapado. No he visto ejemplos o detalles de documentación sobre cómo crear una colección con tope utilizando el controlador C#. He encontrado toneladas de ejemplos de JS, e incluso un ejemplo de Java (aquí: Creating a mongodb capped collection in java).

¿Alguien ha tenido que hacer esto antes, o saber si es posible en C#?

+1

Han pasado muchas cosas en el mundo de MongoDb desde el 3 de julio 12 a las 18:35. La respuesta aceptada ya no es la mejor, ni es la que tiene los votos más altos. La respuesta @ i3arnon es (en el momento de escribir) la mejor respuesta. –

Respuesta

9

Al crear una colección, es necesario especificar que la colección debe ser tapado mediante el uso de CollectionOptions:

CollectionOptionsBuilder options = CollectionOptions.SetCapped(true); 
database.CreateCollection("mycoll", options); 

Es necesario crear la colección de forma explícita (llamando CreateCollection método) para ser capaz de proporcionar a sus opciones . Al llamar al GetCollection con una colección no existente, se crea implícitamente con las opciones predeterminadas.

+0

Funciona muy bien. ¡Gracias! – Ben

+1

Esto ahora está en desuso, por favor vea la respuesta de @ i3arnon – Dinei

15

Aquí hay otro ejemplo; no te olvides de establecer la propiedad MaxSize y MaxDocuments.

var server = MongoServer.Create("mongodb://localhost/"); 
var db = server.GetDatabase("PlayGround"); 

var options = CollectionOptions 
    .SetCapped(true) 
    .SetMaxSize(5000) 
    .SetMaxDocuments(100); 

if (!db.CollectionExists("Log")) 
    db.CreateCollection("Log", options); 
+0

Sí, muy similar a cómo terminé haciéndolo. +1 para detalles extendidos. ¡Gracias! – Ben

14

A partir de v2.0 del conductor hay una nueva API async -sólo. La antigua API ya no se debe usar ya que es una fachada de bloqueo sobre la nueva API y está en desuso.

La forma en que actualmente se recomienda para crear una colección es tapado llamando y esperando IMongoDatabase.CreateCollectionAsync con una instancia que especifica CreateCollectionOptionsCapped = true y MaxSize = <cap size in bytes> o MaxDocuments = <cap in doc count> (o ambos).

async Task CreateCappedCollectionAsync() 
{ 
    var database = new MongoClient().GetDatabase("HamsterSchool"); 
    await database.CreateCollectionAsync("Hamsters", new CreateCollectionOptions 
    { 
     Capped = true, 
     MaxSize = 1024, 
     MaxDocuments = 10, 
    }); 
} 
+2

Es una pena que no se pueda "actualizar" a la respuesta correcta. –

Cuestiones relacionadas