$currentOp
返回包含活动、休眠操作信息的文档流,以及作为事务一部分持有锁的非活动会话信息。该阶段返回所有操作或会话的文档。要运行$currentOp
,需要在admin
数据库中使用db.aggregate()
。
$currentOp
聚合阶段比currentOp
命令及其mongosh
的辅助方法db.currentOp()
更具优势,由于它们都是以单个文档的形式返回结果,因此 其结果集的大小受限于单个文档16MB BSON大小的限制,而$currentOp
阶段会返回一个文档流光标,虽然每个操作一个文档且也受16MB BSON的限制,但$currentOp
结果集的大小没有限制,另外,聚合管道还能对$currentOp
的结果进行任意转换。
{
$currentOp: {
allUsers: <boolean>, idleConnections: <boolean>, idleCursors: <boolean>, idleSessions: <boolean>, localOps: <boolean> } }
布尔类型,缺省值为false,决定是否报告所有用户的操作。
$currentOp
只报告运行命令的用户的操作/闲置连接/闲置光标/闲置会话等。$currentOp
报告所有用户的操作。权限:
allUsers: true
,则需要 inprog
权限。$currentOp
需要 inprog
权限。布尔类型,缺省值为false,决定是否报告空闲的连接。如果设置为false则只报告活动的操作,如果设置为true,则报告包括空闲连接的所有操作。
布尔类型,缺省值为false。如果设置为true
,则报告“空闲”游标的情况,即游标处于打开状态,且当前getMore
操作为非活动状态。
$currentOp.type
为"idleCursor"时,则为空闲光标信息;$currentOp.type
为"op"
且$currentOp.op
为"getmore"
时,则为当前活动的getMore
操作信息。
布尔类型,缺省值为true
。
true
,除活动/休眠操作外,$currentOp
还会报告:
$currentOp
数据流中,每个非活动会话都显示为一个单独的文档。会话信息中会话ID在lsid
字段中,事务在transaction
字段中。type
为"idleSession
时为空闲会话信息。$currentOp.twoPhaseCommitCoordinator
在非活动状态。false
,$currentOp
不报告:
$currentOp.twoPhaseCommitCoordinator
信息。布尔类型,如果设置为true
,对于运行在mongos的聚合,$currentOp
只报告mongos
运行在本地的操作。如果设置为false
,则报告运行在分片上的操作。
localOps
的值对于对于运行在mongod
的$currentOp
聚合没有影响。
布尔类型,决定是否将调用堆栈的信息作为waitingForLatch
字段的一部分返回。
$currentOp
的waitingForLatch.backtrace
字段将包含调用堆栈信息(如果有调用堆栈信息),如果没有调用堆栈信息,则返回空数组。$currentOp
将忽略waitingForLatch.backtrace
字段。如果忽略以上参数,$currentOp
将使用参数缺省值,如下所示,可以指定一个空文档。
{
$currentOp: {
} }
$currentOp
必须是管道的第一个阶段。admin
数据库allUser:true
则必须要有inprog
权限。inpro
权限也是必须的。$currentOp
不能在事务中使用。$currentOp
输出
$comment
和$db
。下面的示例返回作为事务一部分持有锁的非活动会话信息
db.getSiblingDB("admin").aggregate( [
{
$currentOp : {
allUsers: true, idleSessions: true } },
{
$match : {
active: false, transaction : {
$exists: true } } }
] )
阶段1:返回所有活动操作的文档,以及作为事务一部分持有锁的非活动会话的文档。
阶段2:过滤出作为事务一部分持有锁的非活动会话的文档。
也可以使用$currentOp.type
来指定过滤条件:
db.getSiblingDB("admin").aggregate( [
{
$currentOp : {
allUsers: true, idleSessions: true } },
{
$match : {
type: "idleSession" } }
] )
返回结果:
在作为副本集一部分的mongod上运行时:
{
"type" : "idleSession",
"host" : "example.mongodb.com:27017",
"desc" : "inactive transaction",
"client" : "198.51.100.1:50428",
"connectionId" : NumberLong(32),
"appName" : "",
"clientMetadata" : {
"driver" : {
"name" : "PyMongo",
"version" : "3.9.0"
},
"os" : {
"type" : "Darwin",
"name" : "Darwin",
"architecture" : "x86_64",
"version" : "10.14.5"
},
"platform" : "CPython 3.7.1.final.0"
},
"lsid" : {
"id" : UUID("ff21e1a9-a130-4fe0-942f-9e6b6c67ea3c"),