检查MongoDB集合是否使用.net 2.0驱动程序
本文关键字:net 驱动程序 MongoDB 集合 是否 检查 | 更新日期: 2023-09-27 17:54:04
对于现在遗留的。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
创建一个有上限的集合,但似乎不可能检查现有的集合是否有上限。
shell有db.collection.isCapped()
,但没有等效的,我可以在。net API中找到。另一种方法是获取收集的统计数据并检查capped
标志,但我也看不出如何做到这一点。
是的,MongoDB中没有isCapped
。2.0驱动程序。但是你可以从collection stats
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;
}