C# 翻译过滤器定义<;t文件>;可以在mongo shell中运行的常规json mongo查询
我有许多复杂的查询,有时我希望直接对照Mongo进行检查,以达到调试\解释()的目的。 对于较新的2.0+c驱动程序,我不确定如何实现这一点。在以前的版本中,有一个名为C# 翻译过滤器定义<;t文件>;可以在mongo shell中运行的常规json mongo查询,c#,.net,mongodb,mongodb-.net-driver,mongodb-csharp-2.0,C#,.net,Mongodb,Mongodb .net Driver,Mongodb Csharp 2.0,我有许多复杂的查询,有时我希望直接对照Mongo进行检查,以达到调试\解释()的目的。 对于较新的2.0+c驱动程序,我不确定如何实现这一点。在以前的版本中,有一个名为imongquery的东西,它可以工作 一个简单的例子: FilterDefinition<LalalaEvent> filter = Builders<LalalaEvent>.Filter .Where(e => ids.Contains(e.Id) && e.Delete
imongquery
的东西,它可以工作
一个简单的例子:
FilterDefinition<LalalaEvent> filter = Builders<LalalaEvent>.Filter
.Where(e => ids.Contains(e.Id) && e.Deleted != true );
filterDefinitionfilter=Builders.filter
其中(e=>Id.Contains(e.Id)&&e.Deleted!=true);
如果您使用的是最新版本的驱动程序,即2.0.1,您可以轻松地将该过滤器置于查找操作中,返回IFindFluent
并将其打印到字符串:
var filter = Builders<LalalaEvent>.Filter.Where(e => ids.Contains(e.Id) && e.Deleted != true);
var findFluent = collection.Find(filter);
Console.WriteLine(findFluent);
您可以使用集合的属性执行此操作:
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);
}
}
这似乎很奇怪。为什么我需要一个集合来将FilterDefinition转换为json字符串?“我看它行得通,只是感觉不应该这样做。”五年后的zrbecker,这正是我所寻找的。我已经有了这个系列,想看看过滤器是怎么回事。对于某些情况,这是一个简短而简洁的解决方案。有人知道如何使用IAggregateFluent实现这一点吗?@Aneef,我想在我发布解决方案时,另一个答案已经被接受了。不过,我很欣赏为我的解决方案所获得的源源不断的支持票。haha.RenderToBsonDocument在筛选器中重复某个字段时引发异常,例如:{“myField”:{$exists:true},“myField”:{$ne::}
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();