8

使用 C# MongoDB 驱动程序,我们目前创建我们的集合,如下所示:

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

我想mycoll用作封顶收藏。我还没有看到任何关于如何使用 C# 驱动程序创建上限集合的示例或文档细节。我找到了大量的 JS 示例,甚至还有一个 Java 示例(这里:在 java 中创建一个 mongodb capped collection)。

以前有没有人必须这样做,或者知道在 C# 中是否有可能?

4

3 回答 3

16

从驱动程序的 v2.0 开始,有一个新的async-only API。不应再使用旧 API,因为它是新 API 的阻塞外观并且已被弃用。

当前推荐的创建上限集合的方法是调用并等待指定和或(或两者)IMongoDatabase.CreateCollectionAsync的实例。CreateCollectionOptionsCapped = 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,
    });
}
于 2015-06-21T21:06:07.287 回答
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);
于 2012-07-09T06:29:22.333 回答
9

创建集合时,您需要使用以下命令指定集合的​​上限CollectionOptions

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

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

于 2012-07-03T18:57:31.007 回答