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

时间:2015-06-08 10:25:30

标签: c# .net mongodb

使用现有的.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标志,但我也看不出如何做到这一点。

1 个答案:

答案 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;
}