是否有针对MongoDB Linq的"解释查询"?

kel*_*oti 12 c# linq query-optimization mongodb mongodb-.net-driver

有没有办法.explain()在Linq查询上运行或等效?我想知道

  • 实际JSON查询的文本
  • .explain()(使用的索引等)的输出
  • 拥有查询的执行时间也很好

cir*_*rus 10

如果你有一个查询包装器,你可以很容易地获得Json;

var qLinq = Query<T>.Where(x => x.name=="jim");
Console.WriteLine(qLinq.ToJson());
Run Code Online (Sandbox Code Playgroud)

MongoCursor上还有一个Explain()方法,所以你可以这样做;

var exp = Collection.FindAs<T>(qLinq).Explain()
Console.WriteLine(exp.ToJson());
Run Code Online (Sandbox Code Playgroud)

所以,如果你想要花时间,"毫米"就在那里;

var msTaken = exp.First(x => x.Name == "millis").Value.AsInt32;
Run Code Online (Sandbox Code Playgroud)

如果你有IQueryable,尝试这样的事情;

void Do(MongoCollection col, IQueryable iq)
{
        // Json Mongo Query
        var imq = (iq as MongoQueryable<Blob>).GetMongoQuery();
        Console.WriteLine(imq.ToString());

        // you could also just do;
        // var cursor = col.FindAs(typeof(Blob), imq);
        var cursor = MongoCursor.Create(typeof(Blob), col, imq, ReadPreference.Nearest);
        var explainDoc = cursor.Explain();

        Console.WriteLine(explainDoc);
    }//Do()
Run Code Online (Sandbox Code Playgroud)


Mic*_*edy 5

如果您想在库中使用此功能,我只需创建一个名为的GitHub项目

用于.NET的MongoDB查询助手

https://github.com/mikeckennedy/mongodb-query-helper-for-dotnet

它会:

  • 将LINQ查询解释为强类型对象(例如,它是否使用索引)
  • 将LINQ查询转换为MongoDB中运行的JavaScript代码

如果您觉得有趣,请查看并做出贡献.