Mongodb c# 驱动程序:查看从 linq 生成的 MQL bson 查询
Mongodb c# driver: view MQL bson query generated from linq
使用最新版本(2.14)有没有办法查看特定linq查询生成的bson查询文档?
我想这样做有两个原因:
- 调试查询
- 将它们复制到另一个 mongo 客户端中的 运行,例如 compass
我知道我可以启用分析,但我看不出有什么方法可以保证您在 mongo 日志中找到的查询是由特定代码行或查询生成的。另外,通过分析来完成它有点冗长。
您有 2 个选项可以从 LINQ 请求中获取 MQL 查询:
- 安装最近发布的查询analyzer。据我所知,如果您使用全局静态序列化配置,它可能不是 100% 准确。
- 配置
CommandStartedEvent
事件subscriber并分析Command
文档。请注意,您可能需要删除一些可能无法被罗盘正确解析的技术字段,例如 $db
(可能更多),如果有的话,您将在异常消息中看到它。
@dododo 的答案是正确的,也是最好的答案,我只是在这里添加一些适用于选项 2 的代码:
var settings = MongoClientSettings.FromUrl(new MongoUrl(@"mongodb://localhost"));
settings.ClusterConfigurator = builder =>
{
builder.Subscribe<CommandStartedEvent>(x =>
{
var queryDocument = x.Command;
});
};
var client = new MongoClient(settings);
使用最新版本(2.14)有没有办法查看特定linq查询生成的bson查询文档?
我想这样做有两个原因:
- 调试查询
- 将它们复制到另一个 mongo 客户端中的 运行,例如 compass
我知道我可以启用分析,但我看不出有什么方法可以保证您在 mongo 日志中找到的查询是由特定代码行或查询生成的。另外,通过分析来完成它有点冗长。
您有 2 个选项可以从 LINQ 请求中获取 MQL 查询:
- 安装最近发布的查询analyzer。据我所知,如果您使用全局静态序列化配置,它可能不是 100% 准确。
- 配置
CommandStartedEvent
事件subscriber并分析Command
文档。请注意,您可能需要删除一些可能无法被罗盘正确解析的技术字段,例如$db
(可能更多),如果有的话,您将在异常消息中看到它。
@dododo 的答案是正确的,也是最好的答案,我只是在这里添加一些适用于选项 2 的代码:
var settings = MongoClientSettings.FromUrl(new MongoUrl(@"mongodb://localhost"));
settings.ClusterConfigurator = builder =>
{
builder.Subscribe<CommandStartedEvent>(x =>
{
var queryDocument = x.Command;
});
};
var client = new MongoClient(settings);