Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 分析MongoDB数据库以查看执行的查询_C#_Linq_Mongodb_Mongodb .net Driver - Fatal编程技术网

C# 分析MongoDB数据库以查看执行的查询

C# 分析MongoDB数据库以查看执行的查询,c#,linq,mongodb,mongodb-.net-driver,C#,Linq,Mongodb,Mongodb .net Driver,有没有办法查看MongoDB上执行的查询?我使用以下命令在windows上通过mongo.exe启用了评测: db.setProfilingLevel(2); 这将启用配置文件,我可以使用以下命令查询配置文件数据,例如: db.system.profile.find().limit(10).sort( { ts : -1 } ).pretty() 然而,这并没有让我得到执行的查询。我知道我也可以使用IMongoQuery.ToJson方法来查看查询,但是我正在使用Linq查询和MongoDB

有没有办法查看MongoDB上执行的查询?我使用以下命令在windows上通过mongo.exe启用了评测:

db.setProfilingLevel(2);
这将启用配置文件,我可以使用以下命令查询配置文件数据,例如:

db.system.profile.find().limit(10).sort( { ts : -1 } ).pretty()
然而,这并没有让我得到执行的查询。我知道我也可以使用IMongoQuery.ToJson方法来查看查询,但是我正在使用Linq查询和MongoDB C驱动程序。顺便说一句,我真的很想知道为什么他们称这个C驱动程序而不是.NET驱动程序

以下是示例:

var people = db.GetCollection<Person>("People")
    .AsQueryable().Where(x => x.Sessions.Any(y => y.SessionDate != null));

var peeps = people.Select(x => 
    x.Sessions.Where(y => y.SessionDate != null)).ToList();
但是,能够做到以下几点真的很酷:

var people = db.GetCollection<Person>("People")
    .AsQueryable().Where(x => x.Sessions.Any(y => y.SessionDate != null))
    .Expression.ToJson();

但我想这是不被支持的。有什么想法吗?

我认为没有办法在没有IMongoQuery的情况下完成这项工作。好消息是,您可以将用户转换为MongoQueryable并从中获取IMongoQuery:

var people = db.GetCollection<Person>("People")
    .AsQueryable().Where(x => x.Sessions.Any(y => y.SessionDate != null));

var mqPeople = (MongoQueryable<Person>)people;
var query = mqPeople.GetMongoQuery().ToJson();
编辑:


看起来这只适用于Where子句。

这看起来非常正确。谢谢你提起这件事。我将尝试一下,但我假设任何返回IQueryable的受支持Linq方法都应该被视为MongoQueryable。在大多数情况下,这是Where子句的有效假设。如果它不是MongoQueryable,那么Linq语句的一部分可能会在客户端而不是服务器上运行,这可能暗示您可以使用更多的方法进行优化。