将FilterDefinition 转换为我可以在mongo shell中运行的常规json mongo查询

我有很多复杂的查询,我有时希望直接检查Mongo的调试\解释()目的。 使用较新的2.0+ c#驱动程序,我不知道如何做到这一点。 在之前的版本中有一个名为IMongoQuery的东西, 这很有效。

一个简单的例子:

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

如果您使用的是最新版本的驱动程序,即2.0.1,您可以轻松地将该filter放入Find操作中,返回一个IFindFluent并打印其ToString

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

例如对我来说这打印:

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

我今天试图解决同样的问题。 这是我发现的。

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

我打电话时无法访问集合,因此我无法使用上述解决方案。

这可以让你做到

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

您可以使用集合的属性执行该操作:

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