Translate FilterDefinition to regular json mongo query that i can run in a mongo shell

前端 未结 3 1275
时光说笑
时光说笑 2020-12-14 08:44

I have many complex queries that I sometimes wish to check directly against Mongo for debugging \\ explaining() purposes. With the newer 2.0+ c# driver, i\'m not sure how t

相关标签:
3条回答
  • 2020-12-14 09:04

    I was trying to solve the same problem today. Here is what I found.

    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);
        }
    }
    

    I didn't have access to a collection when I was calling it, so I couldn't use the above solutions.

    This allows you to do

    var json = filter.RenderToBsonDocument().ToJson();
    
    0 讨论(0)
  • 2020-12-14 09:20

    If you're using the latest version of the driver, which is 2.0.1 you can easily put that filter in a Find operation, get back an IFindFluent and print its ToString:

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

    For example for me this prints:

    find({ "_id" : { "$in" : [1, 2, 3] }, "Deleted" : { "$ne" : true } })
    
    0 讨论(0)
  • 2020-12-14 09:23

    You are able to perform that using the collection's properties:

    var result = filter.Render(collection.DocumentSerializer,
                               collection.Settings.SerializerRegistry).ToString();
    
    0 讨论(0)
提交回复
热议问题