Bạn có thể lấy Json đủ dễ dàng nếu bạn có trình bao bọc truy vấn;
var qLinq = Query<T>.Where(x => x.name=="jim");
Console.WriteLine(qLinq.ToJson());
Còn có phương thức Explain() trên MongoCursor, vì vậy bạn có thể thực hiện việc này;
var exp = Collection.FindAs<T>(qLinq).Explain()
Console.WriteLine(exp.ToJson());
Vì vậy, nếu bạn muốn có thời gian, "millis" ở trong đó;
var msTaken = exp.First(x => x.Name == "millis").Value.AsInt32;
Nếu bạn có IQueryable
, hãy thử một cái gì đó như thế này;
void Do(MongoCollection col, IQueryable iq)
{
// Json Mongo Query
var imq = (iq as MongoQueryable<Blob>).GetMongoQuery();
Console.WriteLine(imq.ToString());
// you could also just do;
// var cursor = col.FindAs(typeof(Blob), imq);
var cursor = MongoCursor.Create(typeof(Blob), col, imq, ReadPreference.Nearest);
var explainDoc = cursor.Explain();
Console.WriteLine(explainDoc);
}//Do()
Cảm ơn. Hầu hết các truy vấn của chúng tôi là từ các đối tượng 'IQueryable'. Có lẽ câu hỏi hay hơn là làm thế nào để biến một 'IQueryable' thành một' IMongoQuery'? – kelloti
Đó không phải là dễ dàng như vậy để đi theo hướng đó, nhưng bạn có thể làm điều đó - xem câu trả lời cập nhật. Cách tiếp cận khác là đặt một Kho lưu trữ trên lớp Mongo Linq để bạn có thể làm việc trực tiếp với các đối tượng Query, hãy ghi nhật ký của bạn rồi trả về IQueryable thay vì thử và chuyển đổi IQueryable thành Query <> – cirrus
nhờ sự trợ giúp. Giải pháp của bạn không thực sự biên dịch mặc dù. Xem các cập nhật của tôi cho những gì thực sự làm việc cho tôi (lưu ý cách tôi phải trích xuất sâu vào 'Expression' để nhận mệnh đề' where'). – kelloti