Obtenir le script généré dans le pilote MongoDB C #

J’utilise MongoDB.Driver 2.0.0. Existe-t-il un moyen de voir un script généré de linq à MongoDB?

Par exemple, ma requête est comme:

IFindFluent findFluent = Collection.Find( x => hashValues.Contains(x.UrlHash) && x.ProductTopic == topicId); 

Comment cela (ou des requêtes plus complexes) serait-il représenté dans le shell MongoDB?

MODIFIER

Veuillez consulter la réponse de i3arnon pour une méthode côté client utilisant Render() qui est généralement plus simple.


Vous pouvez utiliser le profileur mongodb intégré pour voir ce que la firebase database a réellement reçu:

 db.setProfilingLevel(2); // log every request // show the requests that mongodb has received, along with execution stats: db.system.profile.find().pretty() 

Sinon, vous pouvez entrer le code source du pilote et attendre qu’il crée réellement le message. Cela nécessite toutefois la compilation du pilote à partir du code source, autant que je sache.

EDIT: à partir de la version 2.0.1 du pilote, l’object FindFluent renvoyé par IMongoCollection.Find a un ToSsortingng approprié qui inclut le filtre, mais également une projection, un sorting, etc. (le cas échéant).

Donc, pour cela:

 var findFluent = collection. Find(x => hashValues.Contains(x.UrlHash) && x.ProductTopic == topicId, new FindOptions {MaxTime = TimeSpan.FromSeconds(1)}). Project(x => x.UrlHash). Sort(Builders.Sort.Descending(x => x.ProductTopic)). Skip(6). Limit(7); Console.WriteLine(findFluent); 

La sortie serait:

 find({ "UrlHash" : { "$in" : [4, 5, 6, 7, 8] }, "ProductTopic" : 200 }, { "UrlHash" : 1, "_id" : 0 }). sort({ "ProductTopic" : -1 }). skip(6). limit(7). maxTime(1000) 

Eh bien, vous savez déjà que vous faites une recherche, alors je suppose que vous voulez savoir à quoi ressemble la requête.

Vous pouvez facilement le faire directement depuis votre code en utilisant IFindFluent.Filter :

 BsonDocument filterDocument = findFluent.Filter.Render( collection.DocumentSerializer, collection.Settings.SerializerRegistry); Console.WriteLine(filterDocument); 

La sortie dans votre cas (dépend de hashValues et de topicId bien sûr):

 { "UrlHash" : { "$in" : [4, 5, 6, 7, 8, 9] }, "ProductTopic" : 200 }