Создание коллекции 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,
});
}