有没有办法在MongoDB上查看执行的查询?我使用以下命令通过Windows上的mongo.exe启用了分析:
db.setProfilingLevel(2);
这可以启用分析,我可以使用以下命令查询配置文件数据,例如:
db.system.profile.find().limit(10).sort( { ts : -1 } ).pretty()
然而,这并没有让我得到执行的查询。我知道我也可以使用IMongoQuery.ToJson()
方法查看查询,但我使用Linq查询与MongoDB C#驱动程序(BTW,我真的很想知道他们为什么称这个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();
但我猜这不支持。有什么想法吗?
答案 0 :(得分:1)
如果没有IMongoQuery
,我认为没有办法做到这一点。好消息是你可以将people
投射到MongoQueryable<Person>
并从那里获取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
子句。