使用C# API创建MongoDB封顶集合

8

使用C# MongoDB驱动程序,我们目前是这样创建集合的:

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
自2012年7月3日18:35以来,MongoDb的世界发生了很多变化。被接受的答案不再是最好的答案,也不是得票最高的答案。@i3arnon的答案(在撰写本文时)是最佳答案。 - Ralph Shillington
3个回答

17

从 v2.0 版本的驱动程序开始,引入了一个新的只支持 async 的 API。由于旧的 API 是对新 API 的阻塞门面,已经被弃用,因此不应再使用。

目前推荐创建有上限的集合的方法是调用并等待 IMongoDatabase.CreateCollectionAsync 方法,并提供一个 CreateCollectionOptions 实例,其中指定 Capped = trueMaxSize = <容量大小(以字节为单位)> 或者 MaxDocuments = <文档数量上限> (或两者兼备)。

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

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);

是的,非常类似于我最终的做法。对于详细说明加1。谢谢! - Ben

9

在创建集合时,您需要使用CollectionOptions指定该集合应该是被封顶的:

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

您需要显式创建集合(通过调用CreateCollection方法)才能提供您的选项。当使用不存在的集合调用GetCollection时,它会隐式地使用默认选项创建。


2
这个现在已经被弃用了,请查看@i3arnon的答案。 - Dinei

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接