2012-07-03 28 views
8

kullanarak mongodb şapkalı koleksiyon oluşturma, şu anda şöyle koleksiyonumuzu oluşturun:C# MongoDB sürücüsünü kullanma C# api

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

Ben şapkalı koleksiyon olarak mycoll kullanmak istiyoruz. C# sürücüsünü kullanarak kapaklı bir koleksiyonun nasıl oluşturulduğuna dair herhangi bir örnek veya dokümantasyon bilgisi görmedim. Çok sayıda JS örneği ve hatta bir Java örneği buldum (burada: Creating a mongodb capped collection in java).

Daha önce bunu yapmak veya C# 'de mümkün olup olmadığını bilmek zorunda olan var mı?

+1

MongoDb dünyasında 3 Temmuz 12'den 18: 35'e kadar çok şey oldu. Kabul edilen cevap en iyisi değil, en yüksek oyu alan. @ i3arnon yanıtı (yazma zamanında) en iyi cevaptır. –

cevap

9
bir koleksiyon oluştururken, CollectionOptions kullanarak toplama şapkalı gerektiğini belirtmek gerekir

:

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

Sen seçenekleri sunmak için muktedir (CreateCollection yöntemini çağırarak) açıkça koleksiyon oluşturmak gerekir . Mevcut olmayan koleksiyonla GetCollection numaralı telefonu ararken, varsayılan seçeneklerle örtülü olarak oluşturulur.

+0

Harika çalışıyor. Teşekkürler! – Ben

+1

Bu şimdi kullanımdan kaldırılmıştır, lütfen @ i3arnon'un cevabını – Dinei

15

İşte başka bir örnek; MaxSize ve MaxDocuments özelliğini ayarlamayı unutmayın. Sürücünün v2.0 başlayarak

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

Yep'e, nasıl yaptığınıza çok benziyorum. Genişletilmiş ayrıntılar için +1. Teşekkürler! – Ben

14

yeni async -sadece API var. Eski API, artık yeni API üzerinde engelleyici bir cephe olduğu için kullanılmamalı ve kullanımdan kaldırılmalıdır.

bir şapkalı koleksiyon oluşturmak için şu anda önerilen yolu arayarak ve CreateCollectionOptionsCapped = true ve MaxSize = <cap size in bytes> veya MaxDocuments = <cap in doc count> belirten örneği (veya her ikisi) ile IMongoDatabase.CreateCollectionAsync bekleyen gereğidir.

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

Bu bir utanç, doğru cevaba "yükseltilemez". –