gpt4 book ai didi

c# - 检查 MongoDB 集合是否受 .NET 2.0 驱动程序限制

转载 作者:可可西里 更新时间:2023-11-01 09:12:20 24 4
gpt4 key购买 nike

对于现在遗留的 .NET MongoDB 驱动程序,我过去常常使用以下命令创建一个上限集合(如果它尚不存在)(不是防弹的,但它阻止了我们多次意外使用无上限集合):

private MongoCollection GetCappedCollection(string collectionName, long maxSize)
{
if (!this.database.CollectionExists(collectionName))
CreateCollection(collectionName, maxSize);

MongoCollection<BsonDocument> cappedCollection = this.database.GetCollection(collectionName);
if (!cappedCollection.IsCapped())
throw new MongoException(
string.Format("A capped collection is required but the \"{0}\" collection is not capped.", collectionName));

return cappedCollection;
}

private void CreateCappedCollection(string collectionName, long maxSize)
{
this.database.CreateCollection(collectionName,
CollectionOptions
.SetCapped(true)
.SetMaxSize(maxSize));
}

如何使用新的 2.0 版 .NET MongoDB 驱动程序执行相同的操作?理想情况下,我想保持与上面相同的行为,但抛出异常就足够了。虽然可以使用 CreateCollectionAsync 创建上限集合,但似乎无法检查现有集合是否已上限。

外壳有 db.collection.isCapped() 但我在 .NET API 中找不到等效项。另一种方法是获取集合的统计信息并检查 capped 标志,但我也不知道该怎么做。

最佳答案

是的,MongoDB.Driver 2.0 中没有isCapped。但是你可以从收藏统计中得到它

public async Task<bool> IsCollectionCapped(string collectionName)
{
var command = new BsonDocumentCommand<BsonDocument>(new BsonDocument
{
{"collstats", collectionName}
});

var stats = await GetDatabase().RunCommandAsync(command);
return stats["capped"].AsBoolean;
}

关于c# - 检查 MongoDB 集合是否受 .NET 2.0 驱动程序限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30706694/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com