2012-07-03 9 views
8

Korzystanie ze sterownika C# MongoDB, obecnie tworzymy naszą kolekcję tak:Tworzenie MongoDB kaucyjna kolekcję przy użyciu C# API

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

Chciałbym użyć mycoll jak zakorkowanej kolekcji. Nie widziałem żadnych przykładów ani dokumentacji dotyczących tworzenia kolekcji z ograniczeniami za pomocą sterownika C#. Znalazłem mnóstwo przykładów JS, a nawet przykład Java (tutaj: Creating a mongodb capped collection in java).

Ktoś musiał to zrobić wcześniej, czy wiem, czy jest to możliwe w C#?

+1

Wiele się wydarzyło w świecie MongoDb od 3 lipca o godzinie 12:35. Przyjęta odpowiedź nie jest już najlepsza, ani ta, która ma najwyższe głosy. Odpowiedź @ i3arnon jest (w momencie pisania) najlepszą odpowiedzią. –

Odpowiedz

9

Tworząc kolekcję, trzeba określić, że kolekcja powinna być ograniczona za pomocą CollectionOptions:

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

Musisz utworzyć kolekcję jawnie (poprzez wywołanie CreateCollection metody), aby być w stanie zapewnić opcje . Podczas wywoływania GetCollection z nieistniejącą kolekcją, jest ona domyślnie tworzona z opcjami domyślnymi.

+0

Działa świetnie. Dzięki! – Ben

+1

To jest teraz przestarzałe, zobacz odpowiedź @ i3arnon – Dinei

15

Oto kolejny przykład; nie zapomnij ustawić właściwości MaxSize i 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

Tak, bardzo podobne do tego, jak to zrobiłem. +1 dla rozszerzonych szczegółów. Dzięki! – Ben

14

Począwszy od wersji 2.0 sterownika nowe async -tylko API. Stary interfejs API nie powinien już być używany jako blokująca fasada nowego interfejsu API i jest przestarzały.

aktualnie zalecany sposób tworzenia kaucyjna kolekcji jest przez wywołanie i oczekiwaniu IMongoDatabase.CreateCollectionAsync z CreateCollectionOptions instancji określającej Capped = true i MaxSize = <cap size in bytes> lub MaxDocuments = <cap in doc count> (lub obu).

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

Wstyd, że nie można "uaktualnić" do poprawnej odpowiedzi. –