2

MongoDB で実行されたクエリを表示する方法はありますか? 次のコマンドを使用して、Windows で mongo.exe を使用してプロファイリングを有効にしました。

db.setProfilingLevel(2);

これによりプロファイリングが有効になり、たとえば次のコマンドを使用してプロファイル データをクエリできます。

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

ただし、これは実行されたクエリを取得しません。メソッドを使用してクエリを表示することもできることはわかってIMongoQuery.ToJson()いますが、MongoDB C# ドライバーで Linq クエリを使用しています (ところで、.NET ドライバーの代わりにこの C# ドライバーを呼び出した理由を本当に知りたいです)。

サンプルは次のとおりです。

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。良いニュースは、 a にキャスト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ただし、これは句でのみ機能するようです。

于 2012-12-25T05:34:36.277 に答える