[英]How do you perform db.collection.explain() in C# driver 2.7.0 on Mongo Server 4.0?
The answers MongoDB - can't use .explain() to get query info in C# code? 答案MongoDB-无法使用.explain()获取C#代码中的查询信息? or Is there an "Explain Query" for MongoDB Linq?
或对MongoDB Linq是否有“解释查询”? are outdated and the classes and methods doesn't exist anymore in recent versions of the C# driver.
已过时,并且在最新版本的C#驱动程序中不再存在类和方法。
As a workaround I was able to use the find syntax with options overload to run explain on the queries I wanted to tune. 作为一种解决方法,我可以使用带有选项重载的find语法在要调整的查询上运行解释。
[Fact]
public async Task Metrics()
{
var options = new FindOptions
{
Modifiers = new BsonDocument("$explain", true)
};
var queryable = await MongoDb.Collection.Find("{ Paid: false}", options).As<StatsBsonDocument>().ToListAsync(); // StatsBsonDocument BsonDocument
//Console.WriteLine(queryable.First());
queryable.First().GetStats();
}
public class StatsBsonDocument
{
public dynamic queryPlanner { get; set; }
public ExecutionStats executionStats { get; set; }
public dynamic serverInfo { get; set; }
public void GetStats()
{
try
{
Console.WriteLine($"{queryPlanner.winningPlan.inputStage.stage}");
}
catch (Exception e)
{
Console.WriteLine($"executionSuccess {executionStats.executionSuccess}, stage {queryPlanner.winningPlan.stage},");
}
Console.WriteLine($"{executionStats.nReturned} returned documents, {executionStats.executionTimeMillis}ms execution");
Console.WriteLine($"{executionStats.totalKeysExamined} keys examined , {executionStats.totalDocsExamined} documents examined");
Console.WriteLine($"index vs returned {(decimal)executionStats.totalKeysExamined / executionStats.nReturned}, " +
$"scanned documents/returned {(decimal)executionStats.totalDocsExamined / executionStats.nReturned}");
Console.WriteLine();
// AND_SORTED stage or an AND_HASH stage. index intersection
}
}
public class QueryPlanner
{
public dynamic plannerVersion;
public string Namespace;
public dynamic indexFilterSet;
public dynamic parsedQuery;
public dynamic winningPlan;
public dynamic rejectedPlans;
}
public class ExecutionStats
{
public bool executionSuccess;
public int nReturned;
public int executionTimeMillis;
public int totalKeysExamined;
public int totalDocsExamined;
public dynamic executionStages;
public dynamic allPlansExecution;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.