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

时间:2012-12-16 13:38:14

标签: 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 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();

但我猜这不支持。有什么想法吗?

1 个答案:

答案 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子句。