检查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集合是否使用.net 2.0驱动程序

是的,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;
}