使用现有的.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));
}
如何使用新版本的.NET MongoDB驱动程序执行相同的操作?理想情况下,我希望保持与上面相同的行为,但抛出异常就足够了。虽然可以使用CreateCollectionAsync
创建上限集合,但似乎无法检查现有集合是否有上限。
shell有db.collection.isCapped()
但是我没有在.NET API中找到的等价物。另一种方法是获取集合的统计数据并检查capped
标志,但我也看不出如何做到这一点。
答案 0 :(得分:5)
是的,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;
}