有人知道我们是否可以标记MongoDB查询/命令,以了解应用程序的哪个功能运行了该查询/命令吗



我在各种函数中使用相同的查询(或略有修改但使用相同的MongoDB Collection(,在Mongo Atlas上,我们只得到集合名称和查询,但不知道是哪个函数实际触发了它。

有没有任何方法可以用函数标记查询,以便调试?

我想到了两件事。

第一个是将注释应用于查询的能力:

test> db.foo.find({x:123}).comment("unique identifier xyz");
test> db.system.profile.find().sort({ts:-1}).limit(1)
[
{
op: 'query',
ns: 'test.foo',
command: {
find: 'foo',
filter: { x: 123 },
comment: 'unique identifier xyz',
lsid: { id: UUID("6ce75fd2-dd4a-4c4e-9655-b80eca8ef755") },
'$db': 'test'
},
keysExamined: 0,
docsExamined: 10,
...

还可以在连接字符串中应用appName


上面我演示了数据库探查器是一个可以显示注释的地方,如果配置的话。文档中介绍了可用性的完整列表。

征求意见:

comment()将注释字符串与查找操作相关联。这样可以更容易地跟踪以下诊断输出中的特定查询:

  • system.profile
  • QUERY日志组件
  • db.currentOp()

请参阅配置mongod日志的日志详细信息、数据库档案器教程或db.currentOp((命令。

对于appName:

指定自定义应用程序名称。应用程序名称显示在:

  • mongod和mongos日志
  • currentOp命令和db.currentOp((方法输出中的currentOp.appName字段
  • 数据库探查器输出中的system.profile.appName字段

appName连接选项可用于:

  • MongoDB驱动程序在MongoDB 4.0中启动
  • mongosh启动于mongosh 1.1.9
  • 从Compass 1.28.4开始的MongoDB Compass

最新更新