C# 分析MongoDB数据库以查看执行的查询
有没有办法查看MongoDB上执行的查询?我使用以下命令在windows上通过mongo.exe启用了评测: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
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语句的一部分可能会在客户端而不是服务器上运行,这可能暗示您可以使用更多的方法进行优化。