我有很多复杂的查询,我有时希望直接检查Mongo以进行调试\ explain()。
使用较新的2.0+ c#驱动程序,我不知道如何执行此操作。在之前的版本中,有一个叫IMongoQuery
和This的工作。
一个简单的例子:
FilterDefinition<LalalaEvent> filter = Builders<LalalaEvent>.Filter
.Where(e => ids.Contains(e.Id) && e.Deleted != true );
答案 0 :(得分:32)
我今天试图解决同样的问题。这是我发现的。
public static class MongoExtensions
{
public static BsonDocument RenderToBsonDocument<T>(this FilterDefinition<T> filter)
{
var serializerRegistry = BsonSerializer.SerializerRegistry;
var documentSerializer = serializerRegistry.GetSerializer<T>();
return filter.Render(documentSerializer, serializerRegistry);
}
}
我在打电话时无法访问某个集合,因此我无法使用上述解决方案。
这允许你做
var json = filter.RenderToBsonDocument().ToJson();
答案 1 :(得分:15)
如果您使用的是最新版本的驱动程序,即2.0.1,则可以轻松地将该过滤器置于Find
操作中,取回IFindFluent
并打印其ToString
}:
var filter = Builders<LalalaEvent>.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 } })
答案 2 :(得分:15)
您可以使用集合的属性执行该操作:
var result = filter.Render(collection.DocumentSerializer,
collection.Settings.SerializerRegistry).ToString();