我在各种函数中使用相同的查询(或略有修改但使用相同的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