将 FilterDefinition<TDocument> 翻译成常规 json mongo 查询,我可以在 mongo shell 中 运行
Translate FilterDefinition<TDocument> to regular json mongo query that i can run in a mongo shell
我有许多复杂的查询,有时我希望直接对照 Mongo 检查这些查询以用于调试 \ explaining() 目的。
使用较新的 2.0+ c# 驱动程序,我不确定如何执行此操作。在以前的版本中,有一个叫做 IMongoQuery
的东西,This 起作用了。
一个简单的例子:
FilterDefinition<LalalaEvent> filter = Builders<LalalaEvent>.Filter
.Where(e => ids.Contains(e.Id) && e.Deleted != true );
如果您使用的是最新版本的驱动程序,即 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 } })
您可以使用集合的属性执行此操作:
var result = filter.Render(collection.DocumentSerializer,
collection.Settings.SerializerRegistry).ToString();
我今天试图解决同样的问题。这是我找到的。
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();
我有许多复杂的查询,有时我希望直接对照 Mongo 检查这些查询以用于调试 \ explaining() 目的。
使用较新的 2.0+ c# 驱动程序,我不确定如何执行此操作。在以前的版本中,有一个叫做 IMongoQuery
的东西,This 起作用了。
一个简单的例子:
FilterDefinition<LalalaEvent> filter = Builders<LalalaEvent>.Filter
.Where(e => ids.Contains(e.Id) && e.Deleted != true );
如果您使用的是最新版本的驱动程序,即 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 } })
您可以使用集合的属性执行此操作:
var result = filter.Render(collection.DocumentSerializer,
collection.Settings.SerializerRegistry).ToString();
我今天试图解决同样的问题。这是我找到的。
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();