调用Collection.FindAsync()时如何查看生成的查询语句?
查看MongoDB FindAsync()生成的查询语句的几种方法
- 先构建查询对象再转字符串
把FindAsync()的查询条件单独提取为FilterDefinition对象,用同步的Find()方法套这个对象调用ToString()就能拿到查询语句,之后再把这个对象传给FindAsync()执行即可。示例代码:// 构建查询条件 var filter = Builders<YourEntity>.Filter.Where(x => x.Name == "test"); // 查看生成的查询语句 var queryText = yourCollection.Find(filter).ToString(); // 执行异步查询 var result = await yourCollection.FindAsync(filter); - 开启MongoDB驱动日志
通过配置MongoClient的日志监听,捕获所有发送给数据库的命令,其中就包含FindAsync()生成的查询语句。示例配置:var clientSettings = MongoClientSettings.FromConnectionString("你的连接字符串"); clientSettings.ClusterConfigurator = builder => { builder.Subscribe<CommandStartedEvent>(cmdEvent => { // 打印查询命令,也可写入日志文件 Console.WriteLine($"执行的数据库命令: {cmdEvent.Command.ToJson()}"); }); }; var mongoClient = new MongoClient(clientSettings); - 直接在监视窗口操作
把FindAsync()里的查询条件参数单独提出来,在Visual Studio监视窗口中输入yourCollection.Find(这里放提取的filter).ToString(),就能直接看到对应的查询语句——FindAsync()和Find()用的是同一套查询生成逻辑,只是执行方式不同。
内容的提问来源于stack exchange,提问作者David Klempfner
相关产品推荐
相关产品推荐

