Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 翻译过滤器定义<;t文件>;可以在mongo shell中运行的常规json mongo查询_C#_.net_Mongodb_Mongodb .net Driver_Mongodb Csharp 2.0 - Fatal编程技术网

C# 翻译过滤器定义<;t文件>;可以在mongo shell中运行的常规json mongo查询

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

我有许多复杂的查询,有时我希望直接对照Mongo进行检查,以达到调试\解释()的目的。 对于较新的2.0+c驱动程序,我不确定如何实现这一点。在以前的版本中,有一个名为
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();