Создание коллекции MongoDB capped с помощью C# api

используя драйвер C# MongoDB, мы в настоящее время создаем нашу коллекцию следующим образом:

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

Я хотел бы использовать mycoll как закрытая коллекция. Я не видел никаких примеров или документации о том, как создать закрытую коллекцию с помощью драйвера C#. Я нашел тонны примеров JS и даже пример Java (здесь:создание коллекции MongoDB в java).

кто-нибудь должен был сделать это раньше или знать, возможно ли это в C#?

3 ответов


при создании коллекции необходимо указать, что она должна быть закрыта с помощью CollectionOptions:

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

вам нужно создать коллекцию явно (путем вызова CreateCollection метод), чтобы иметь возможность предоставлять свои варианты. При вызове GetCollection С несуществующей коллекцией он неявно создается с параметрами по умолчанию.


вот еще один пример; не забудьте установить свойство 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);

начиная с версии v2.0 из драйвера есть новый async-только API. Старый API больше не должен использоваться, поскольку это блокирующий фасад над новым API и устарел.

в настоящее время рекомендуемый способ создания закрытой коллекции-это вызов и ожидание IMongoDatabase.CreateCollectionAsync С CreateCollectionOptions экземпляр, который указывает Capped = true и MaxSize = <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,
    });
}