Traduci FilterDefinition alla normale query json mongo che posso eseguire in una shell mongo

Ho molte domande complesse che a volte desidero controllare direttamente contro Mongo per scopi di debugging \ explainining (). Con il nuovo driver 2.0+ c #, non sono sicuro di come farlo. Con la versione precedente c’era una cosa chiamata IMongoQuery e questo funzionava.

Un semplice esempio:

 FilterDefinition filter = Builders.Filter .Where(e => ids.Contains(e.Id) && e.Deleted != true ); 

Se stai usando l’ultima versione del driver, che è 2.0.1, puoi facilmente inserire quel filtro in un’operazione Find , recuperare un IFindFluent e stampare ToString :

 var filter = Builders.Filter.Where(e => ids.Contains(e.Id) && e.Deleted != true); var findFluent = collection.Find(filter); Console.WriteLine(findFluent); 

Ad esempio per me questa stampa:

 find({ "_id" : { "$in" : [1, 2, 3] }, "Deleted" : { "$ne" : true } }) 

Stavo cercando di risolvere lo stesso problema oggi. Ecco cosa ho trovato.

 public static class MongoExtensions { public static BsonDocument RenderToBsonDocument(this FilterDefinition filter) { var serializerRegistry = BsonSerializer.SerializerRegistry; var documentSerializer = serializerRegistry.GetSerializer(); return filter.Render(documentSerializer, serializerRegistry); } } 

Non ho avuto accesso a una raccolta quando la chiamavo, quindi non ho potuto utilizzare le soluzioni di cui sopra.

Questo ti permette di fare

 var json = filter.RenderToBsonDocument().ToJson(); 

Sei in grado di farlo utilizzando le proprietà della collezione:

 var result = filter.Render(collection.DocumentSerializer, collection.Settings.SerializerRegistry).ToString();