2012-07-03 70 views
8

使用C#MongoDB的司机mongodb的上限集合,我们目前正在创建我们的集合,像这样:创建使用C#API

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

我想用mycoll作为上限的集合。我还没有看到关于如何使用C#驱动程序创建加盖集合的示例或文档细节。我发现了很多JS例子,甚至还有一个Java例子(这里是:Creating a mongodb capped collection in java)。

有没有人必须这样做,或知道如果它可能在C#?

+1

自从7月3日12点18:35以来,在MongoDb的世界里发生了很多事情。被接受的答案不再是最好的答案,也不是最高的选票。 @ i3arnon的答案是(写作时)最好的答案。 –

回答

9

当创建一个集合,你需要指定的收集应加盖使用CollectionOptions

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

你需要明确创建集合(通过调用CreateCollection法),以能够提供你的选择。当使用不存在的集合调用GetCollection时,它会默认使用默认选项创建。

+0

工程很好。谢谢! – Ben

+1

现在不推荐使用,请参阅@ i3arnon的回答 – Dinei

15

这里是另一个例子;不要忘记设置MaxSize和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

是的,这与我最终做出的结果非常相似。 +1用于扩展详细信息。谢谢! – Ben

14

由驱动器2.0开始有一个新的async -only API。不应该再使用旧的API,因为它是新API的屏蔽外观,因此不推荐使用。

目前推荐的方法来创建一个封顶集合是通过调用并等待IMongoDatabase.CreateCollectionAsyncCreateCollectionOptions实例指定Capped = trueMaxSize = <cap size in bytes>MaxDocuments = <cap in doc count>(或两者)。

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

一个耻辱,不能被“升级”到正确的答案。 –