我正在寻找通过.NET驱动程序从MongoDB中检索索引使用情况信息。出于好奇,它是在集成测试中证明正在按预期使用索引,特别是访问次数。
我浏览了最新的API文档,发现IndexInfo,它提供索引元数据,但不提供统计信息。最接近的是CollectionStatsResult,但这不提供访问次数。
是否有提供我所寻找的API和数据结构?还有另一种较低级别的方法(例如,通过.NET驱动程序执行MongoDB asd命令的方法吗?
我知道有可能。我正在使用MongoDB Compass,运行测试时能够看到访问量增加。
答案 0 :(得分:0)
该解决方案的一部分要贷给Alex Blex,该解决方案是将Aggregate
与$indexStats一起使用。
我最终得到了这段代码,该代码返回访问次数和上次访问时间的元组。它遍历代表返回结果的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;
}