创建使用C#API一个MongoDB的收集上限(Creating a mongodb capped

2019-07-30 06:02发布

使用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的上限集合 )。

有没有人有之前做到这一点,或者知道是否有可能在C#中?

Answer 1:

当创建一个集合,你需要指定收集应使用封顶CollectionOptions

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

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



Answer 2:

从司机的V2.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,
    });
}


Answer 3:

下面是另一个例子; 不要忘记设置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);


文章来源: Creating a mongodb capped collection using c# api