2

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

db.setProfilingLevel(2);

这启用了分析,我可以使用以下命令查询配置文件数据,例如:

db.system.profile.find().limit(10).sort( { ts : -1 } ).pretty()

但是,这并没有让我得到执行的查询。我知道我也可以使用该IMongoQuery.ToJson()方法来查看查询,但我正在使用带有 MongoDB C# 驱动程序的 Linq 查询(顺便说一句,我真的很想知道他们为什么调用这个 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();

但我猜这是不支持的。有任何想法吗?

4

1 回答 1

1

我认为没有获得IMongoQuery. 好消息是您可以people转换为 aMongoQueryable<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子句。

于 2012-12-25T05:34:36.277 回答