如何使用 MongoDB .NET Driver 查询索引访问计数?

How to query for index access count using MongoDB .NET Driver?

我正在寻找通过 .NET 驱动程序从 MongoDB 检索索引使用信息。好奇的是在集成测试中证明索引正在按预期使用,特别是访问次数。

我浏览了最新的 API 文档并找到了 IndexInfo, which provides index metadata, but not statistics. The closest thing is the CollectionStatsResult,但这并没有给出访问计数。

是否有 API 和数据结构可以提供我正在寻找的内容?是否有另一种较低级别的方法(例如,通过 .NET 驱动程序执行 MongoDB asd 命令的方法?

我知道这是可能的。我正在使用 MongoDB Compass,当我 运行 测试时能够看到递增的访问。

部分解决方案归功于 Alex Blex,即使用 Aggregate$indexStats

我得到了这段代码,它 return 是访问计数和上次访问时间的元组。它遍历代表return结果的BsonDocument,寻找相关数据。

public async Task<(long AccessCount, DateTime LastAccessed)> GetIndexStatisticsAsync(string collectionName, string indexName)
{
    var statsPipeline = new[] { new BsonDocument(new BsonElement("$indexStats", new BsonDocument())) };

    using (var stats = await Database.GetCollection<BsonDocument>(collectionName).AggregateAsync<BsonDocument>(statsPipeline))
        while (await stats.MoveNextAsync())
        {
            var batch = stats.Current;
            var document = batch
                .Where(x => x.Elements.Any(y => y.Name.IsOneOf("key", "name") && y.Value == indexName))
                .Select(x => (BsonDocument)x.Elements.FirstOrDefault(y => y.Name == "accesses").Value)
                .FirstOrDefault();

            return document == null
                ? default
                : ((long)document.Elements.ElementAt(0).Value, (DateTime)document.Elements.ElementAt(1).Value);
        }

    return default;
}