Navigation

$currentOp (aggregation)

Definition

New in version 3.6.

$currentOp

Returns a stream of documents containing information on active and/or dormant operations as well as inactive sessions that are holding locks as part of a transaction. The stage returns a document for each operation or session. To run $currentOp, use the db.aggregate() helper on the admin database.

The $currentOp aggregation stage is preferred over the currentOp command and its mongo shell helper db.currentOp(). Because currentOp command and db.currentOp() helper returns the results in a single document, the total size of the currentOp result set is subject to the maximum 16MB BSON size limit for documents. The $currentOp stage returns a cursor over a stream of documents, each of which reports a single operation. Each operation document is subject to the 16MB BSON limit, but unlike the currentOp command, there is no limit on the overall size of the result set.

$currentOp also enables you to perform arbitrary transformations of the results as the documents pass through the pipeline.

Syntax

Changed in version 4.2.

{ $currentOp: { allUsers: <boolean>, idleConnections: <boolean>, idleCursors: <boolean>, idleSessions: <boolean>, localOps: <boolean> } }

$currentOp takes an options document as its operand:

Option Description
allUsers

Boolean.

  • If set to false, $currentOp will only report on operations/idle connections/idle cursors/idle sessions belonging to the user who ran the command.
  • If set to true, $currentOp will report operations belonging to all users.

Note

For standalone and replica sets that enforce access control, inprog privilege is required if allUsers: true.

For sharded clusters that enforce access control, the inprog privilege is required to run $currentOp.

Defaults to false.

idleConnections

Boolean. If set to false, $currentOp will only report active operations. If set to true, all operations including idle connections will be returned.

Defaults to false.

idleCursors

Boolean.

If set to true, $currentOp will report on cursors that are “idle”; i.e. open but not currently active in a getMore operation.

Information on idle cursors have the type set to "idleCursor".

Information on cursors currently active in a getMore operation information have the type set to "op" and op set to getmore.

Defaults to false.

New in version 4.2.

idleSessions

Boolean.

  • If set to true, in addition to active/dormant operations, $currentOp will report on:

    • Inactive sessions that are holding locks as part of a transaction. Each inactive session will appear as a separate document in the $currentOp stream.

      The document for a session includes information on the session id in the lsid field and the transaction in the transaction field.

      Starting in MongoDB 4.2, information on idle sessions have the type set to "idleSession".

    • $currentOp.twoPhaseCommitCoordinator in inactive state

  • If set to false, $currentOp will not report on:

Defaults to true.

New in version 4.0.

localOps

Boolean. If set to true for an aggregation running on mongos, $currentOp reports only those operations running locally on that mongos. If false, then the $currentOp will instead report operations running on the shards.

The localOps parameter has no effect for $currentOp aggregations running on mongod.

Defaults to false.

New in version 4.0.

backtrace

Boolean. Determines whether callstack information is returned as part of the waitingForLatch output field.

Defaults to false.

New in version 4.2.2.

Omitting any of the above parameters will cause $currentOp to use that parameter’s default value. Specify an empty document, as shown below, to use the default values of all parameters.

{ $currentOp: { } }

Constraints

Pipeline

  • $currentOp must be the first stage in the pipeline.
  • Pipelines that start with $currentOp can only be run on the admin database.

Access Control

  • For standalone and replica sets that enforce access control, inprog privilege is required to run $currentOp if allUsers: true.
  • For sharded clusters that enforce access control, the inprog privilege is required to run $currentOp.

Transactions

Example

The following example returns information on inactive sessions that are holding locks as part of a transaction. Specifically:

  • The first stage returns documents for all active operations as well as inactive sessions that are holding locks as part of a transaction.
  • The second stage filters for just those documents related to inactive sessions that are holding locks as part of a transaction.
db.getSiblingDB("admin").aggregate( [
   { $currentOp : { allUsers: true, idleSessions: true } },
   { $match : { active: false, transaction : { $exists: true } } }
] )

Starting in version 4.2, you can use $currentOp.type to specify an equivalent filter:

db.getSiblingDB("admin").aggregate( [
   { $currentOp : { allUsers: true, idleSessions: true } },
   { $match : { type: "idleSession" } }
] )

Tip

For transactions on a sharded cluster, starting in version 4.2.1, include localOps:true in the aforementioned examples for a composite view of the transactions.

Both operations return documents of the form:

When run on a mongod that is part of a replica set:

{
   "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"),
      "uid" : BinData(0,"3pxqkATNUYKV/soT7qqKE0zC0BFb0pBz1pk4xXcSHsI=")
   },
   "transaction" : {
      "parameters" : {
         "txnNumber" : NumberLong(4),
         "autocommit" : false,
         "readConcern" : {
            "level" : "snapshot",
            "afterClusterTime" : Timestamp(1563892246, 1)
         }
      },
      "readTimestamp" : Timestamp(0, 0),
      "startWallClockTime" : "2019-07-23T10:30:49.461-04:00",
      "timeOpenMicros" : NumberLong(1913590),
      "timeActiveMicros" : NumberLong(55),
      "timeInactiveMicros" : NumberLong(1913535),
      "expiryTime" : "2019-07-23T10:31:49.461-04:00"
   },
   "waitingForLock" : false,
   "active" : false,
   "locks" : {
      "ReplicationStateTransition" : "w",
      "Global" : "w",
      "Database" : "w",
      "Collection" : "w"
   },
   "lockStats" : {
      "ReplicationStateTransition" : {
         "acquireCount" : {
            "w" : NumberLong(5)
         }
      },
      "Global" : {
         "acquireCount" : {
            "r" : NumberLong(3),
            "w" : NumberLong(1)
         }
      },
      "Database" : {
         "acquireCount" : {
            "r" : NumberLong(2),
            "w" : NumberLong(1)
         }
      },
      "Collection" : {
         "acquireCount" : {
            "w" : NumberLong(1)
         }
      },
      "Mutex" : {
         "acquireCount" : {
            "r" : NumberLong(3)
         }
      },
      "oplog" : {
         "acquireCount" : {
            "r" : NumberLong(2)
         }
      }
   },
   "waitingForFlowControl" : false,
   "flowControlStats" : {
    }

}

Starting in version 4.2.1, $currentOp run with localOps:true provides a composite view (rather than per shards information) of the in-progress transactions run on that mongos.

db.getSiblingDB("admin").aggregate( [
   { $currentOp : { allUsers: true, idleSessions: true, localOps: true } },
   { $match : { type: "idleSession" } }
] );

// or

db.getSiblingDB("admin").aggregate( [
   { $currentOp : { allUsers: true, idleSessions: true, localOps: true } },
   { $match : { active: false, transaction : { $exists: true } } }
] )
{
   "type" : "idleSession",
   "host" : "example.mongodb.com:27017",
   "desc" : "inactive transaction",
   "client" : "198.51.100.1:49618",
   "connectionId" : NumberLong(48),
   "appName" : "",
   "clientMetadata" : {
      "driver" : {
         "name" : "PyMongo",
         "version" : "3.9.0"
      },
      "os" : {
         "type" : "Darwin",
         "name" : "Darwin",
         "architecture" : "x86_64",
         "version" : "10.14.6"
      },
      "platform" : "CPython 3.7.1.final.0",
      "mongos" : {
         "host" : "example.mongodb.com:27017",
         "client" : "198.51.100.1:53268",
         "version" : "4.2.1"
      }
   },
   "lsid" : {
      "id" : UUID("2c9ce111-133e-45b7-a00f-a7871005cae1"),
      "uid" : BinData(0,"3pxqkATNUYKV/soT7qqKE0zC0BFb0pBz1pk4xXcSHsI=")
   },
   "active" : false,
   "transaction" : {
      "parameters" : {
         "txnNumber" : NumberLong(2),
         "autocommit" : false,
         "readConcern" : {
            "level" : "snapshot",
            "afterClusterTime" : Timestamp(1571869019, 2)
         }
      },
      "globalReadTimestamp" : Timestamp(1571869019, 2),
      "startWallClockTime" : "2019-10-23T18:16:59.341-04:00",
      "timeOpenMicros" : NumberLong(169244639),
      "timeActiveMicros" : NumberLong(535),
      "timeInactiveMicros" : NumberLong(169244104),
      "numParticipants" : 2,
      "participants" : [
         {
            "name" : "shardB",
            "coordinator" : true,
            "readOnly" : false
         },
         {
            "name" : "shardA",
            "coordinator" : false,
            "readOnly" : false
         }
      ],
      "numReadOnlyParticipants" : 0,
      "numNonReadOnlyParticipants" : 2
   }
}

In 4.2.0, you can only return in-progress transactions information when run without localOps:true on the mongos. When run without localOps:true on the mongos, the transaction information is per shard.

When run on a mongos without localOps:true, the transaction information is per shard.

{
   "shard" : "shardB",
   "type" : "idleSession",
   "host" : "shardB.mongodb.com:27018",
   "desc" : "inactive transaction",
   "client_s" : "198.51.100.1:53961",
   "connectionId" : NumberLong(63),
   "appName" : "",
   "clientMetadata" : {
      "driver" : {
         "name" : "PyMongo",
         "version" : "3.9.0"
      },
      "os" : {
         "type" : "Darwin",
         "name" : "Darwin",
         "architecture" : "x86_64",
         "version" : "10.14.6"
      },
      "platform" : "CPython 3.7.1.final.0",
      "mongos" : {
         "host" : "example.mongodb.com:27017",
         "client" : "198.51.100.1:53976",
         "version" : "4.2.0"
      }
   },
   "lsid" : {
      "id" : UUID("720d403c-8daf-40bb-b61e-329e20b0493b"),
      "uid" : BinData(0,"3pxqkATNUYKV/soT7qqKE0zC0BFb0pBz1pk4xXcSHsI=")
   },
   "transaction" : {
      "parameters" : {
         "txnNumber" : NumberLong(1),
         "autocommit" : false,
         "readConcern" : {
            "level" : "snapshot"
         }
      },
      "readTimestamp" : Timestamp(0, 0),
      "startWallClockTime" : "2019-10-21T18:31:12.192-04:00",
      "timeOpenMicros" : NumberLong(24137008),
      "timeActiveMicros" : NumberLong(52),
      "timeInactiveMicros" : NumberLong(24136956),
      "expiryTime" : "2019-10-21T18:32:12.192-04:00"
   },
   "waitingForLock" : false,
   "active" : false,
   "locks" : {
      "ReplicationStateTransition" : "w",
      "Global" : "w",
      "Database" : "w",
      "Collection" : "w"
   },
   "lockStats" : {
      "ReplicationStateTransition" : {
         "acquireCount" : {
            "w" : NumberLong(3)
         }
      },
      "Global" : {
         "acquireCount" : {
            "r" : NumberLong(1),
            "w" : NumberLong(1)
         }
      },
      "Database" : {
         "acquireCount" : {
            "r" : NumberLong(1),
            "w" : NumberLong(1)
         }
      },
      "Collection" : {
         "acquireCount" : {
            "r" : NumberLong(1),
            "w" : NumberLong(1)
         }
      },
      "Mutex" : {
         "acquireCount" : {
            "r" : NumberLong(6)
         }
      }
   }
}
{
   "shard" : "shardA",
   "type" : "idleSession",
   ...
}

Output Fields

Each output document may contain a subset of the following fields as relevant for the operation:

$currentOp.type

New in version 4.2.

The type of operation. Values are either:

  • op
  • idleSession
  • idleCursor

If the $currentOp.type is op, $currentOp.op provides details on the specific operation.

$currentOp.host

The name of the host against which the operation is run.

$currentOp.shard

The name of the shard where the operation is running.

Only present for sharded clusters.

$currentOp.desc

A description of the operation.

$currentOp.connectionId

An identifier for the connection where the specific operation originated.

$currentOp.client

The IP address (or hostname) and the ephemeral port of the client connection where the operation originates.

For multi-document transactions, $currentOp.client stores information about the most recent client to run an operation inside the transaction.

For standalones and replica sets only

$currentOp.client_s

The IP address (or hostname) and the ephemeral port of the mongos where the operation originates.

For sharded clusters only

$currentOp.clientMetadata

Additional information on the client.

For multi-document transactions, $currentOp.client stores information about the most recent client to run an operation inside the transaction.

$currentOp.appName

New in version 3.4.

The identifier of the client application which ran the operation. Use the appName connection string option to set a custom value for the appName field.

$currentOp.active

A boolean value specifying whether the operation has started. Value is true if the operation has started or false if the operation is idle, such as an idle connection, an inactive session, or an internal thread that is currently idle. An operation can be active even if the operation has yielded to another operation.

$currentOp.twoPhaseCommitCoordinator

Information on either:

  • The commit coordination metrics for a transaction whose write operations span multiple shards.

    Commit coordination is handled by a shard, and $currentOp (run either on a mongos or a shard member) returns a shard’s coordination information only for those transactions currently being coordinated by that shard.

    To filter for just the commit coordination metrics:

    db.getSiblingDB("admin").aggregate( [
        { $currentOp: { allUsers: true, idleSessions: true } },
        { $match: { desc: "transaction coordinator" } }
    ] )
    
  • A specific commit coordination operation (i.e. type is op and desc is "TransactionCoordinator") spawned by the transaction coordinator.

Note

New in version 4.2.1.

$currentOp.twoPhaseCommitCoordinator.lsid

The session identifier for the multi-shard transaction.

The combination of the lsid and txnNumber identifies the transaction.

Available for both the commit coordination metrics and for specific coordination operation.

New in version 4.2.1.

$currentOp.twoPhaseCommitCoordinator.txnNumber

The transaction number for the multi-shard transaction.

The combination of the txnNumber and lsid identifies the transaction.

Available for both the commit coordination metrics and for specific coordination operation.

New in version 4.2.1.

$currentOp.twoPhaseCommitCoordinator.action

The specific commit coordination operation spawned by the transaction coordinator:

  • "sendingPrepare"
  • "sendingCommit"
  • "sendingAbort"
  • "writingParticipantList"
  • "writingDecision"
  • "deletingCoordinatorDoc"

Only available for specific coordination operation.

New in version 4.2.1.

$currentOp.twoPhaseCommitCoordinator.startTime

The start date and time of the action.

Only available for specific coordination operation.

New in version 4.2.1.

$currentOp.twoPhaseCommitCoordinator.numParticipants

Number of shards participating in this commit.

Only available for the commit coordination metrics.

New in version 4.2.1.

$currentOp.twoPhaseCommitCoordinator.state

The current step/state of the commit coordination process.

Step/stage Description
inactive Not actively part of a commit.
writingParticipantList Writing a local record of the list of shards that are part of this multi-shard transaction.
waitingForVotes Waiting for the participants to respond with vote to commit or abort.
writingDecision Writing a local record of the coordinator’s decision to commit or abort based on votes.
waitingForDecisionAck Waiting for participants to acknowledge the coordinator’s decision to commit or abort.
deletingCoordinatorDoc Deleting the local record of commit decision.

Only available for the commit coordination metrics.

See also $currentOp.twoPhaseCommitCoordinator.stepDurations.

New in version 4.2.1.

$currentOp.twoPhaseCommitCoordinator.commitStartTime

The date and time when the commit started.

Only available for the commit coordination metrics.

New in version 4.2.1.

$currentOp.twoPhaseCommitCoordinator.hasRecoveredFromFailover

A boolean that indicates whether the commit coordination was restarted due to failover on the shard that is coordinating the commit.

If hasRecoveredFromFailover is true, then the times specified in $currentOp.twoPhaseCommitCoordinator.stepDurations may not be accurate for all steps.

Only available for the commit coordination metrics.

New in version 4.2.1.

$currentOp.twoPhaseCommitCoordinator.stepDurations

A document that contains the duration, in microseconds, of the completed or in-progress steps/state of the active process as well as the cumulative total duration; for example:

"stepDurations" : {
   "writingParticipantListMicros" : NumberLong(17801),
   "totalCommitDurationMicros" : NumberLong(42488463),
   "waitingForVotesMicros" : NumberLong(30378502),
   "writingDecisionMicros" : NumberLong(15015),
   "waitingForDecisionAcksMicros" : NumberLong(12077145),
   "deletingCoordinatorDocMicros" : NumberLong(6009)
},

If $currentOp.twoPhaseCommitCoordinator.hasRecoveredFromFailover is true, then the times specified in stepDurations may not be accurate for all steps.

For a coordinator in an inactive state, the document is empty:

"stepDurations" : {
}

Only available for the commit coordination metrics.

See $currentOp.twoPhaseCommitCoordinator.state.

New in version 4.2.1.

$currentOp.twoPhaseCommitCoordinator.decision

A document that contains the commit/abort decision, for example:

  • For a commmit decision:

    "decision" : {
       "decision" : "commit",
       "commitTimestamp" : Timestamp(1572034669, 3)
    }
    
  • For an abort decision:

    "decision" : {
       "decision" : "abort",
       "abortStatus" : {
          "code" : 282,
          "codeName" : "TransactionCoordinatorReachedAbortDecision",
          "errmsg" : "Transaction exceeded deadline"
       }
    }
    

Only available for the commit coordination metrics.

New in version 4.2.1.

$currentOp.twoPhaseCommitCoordinator.deadline

The date and time by which the commit must finish.

Only available for the commit coordination metrics.

New in version 4.2.1.

$currentOp.currentOpTime

The start time of the operation.

New in version 3.6.

$currentOp.effectiveUsers

An array that contains a document for each user associated with the operation. Each user document contains the user name and the authentication db.

See also

$currentOp.runBy

New in version 4.2.

$currentOp.runBy

An array that contains a document for each user who is impersonating the effectiveUser(s) for the operation. The runBy document contains the user name and the authentication db. In general, the impersonating user is the __system user; e.g.

"runBy" : [
   {
      "user" : "__system",
      "db" : "local"
   }
]

New in version 4.2.

$currentOp.opid

The identifier for the operation. You can pass this value to db.killOp() in the mongo shell to terminate the operation.

Warning

Terminate running operations with extreme caution. Only use db.killOp() to terminate operations initiated by clients and do not terminate internal database operations.

$currentOp.secs_running

The duration of the operation in seconds. MongoDB calculates this value by subtracting the current time from the start time of the operation.

Only present if the operation is running; i.e. if active is true.

$currentOp.microsecs_running

The duration of the operation in microseconds. MongoDB calculates this value by subtracting the current time from the start time of the operation.

Only present if the operation is running; i.e. if active is true.

$currentOp.lsid

The session identifier.

Only present if the operation is associated with a session.

New in version 3.6.

$currentOp.transaction

A document that contains multi-document transaction information.

Only present if the operation is part of a transaction:

  • Present starting in 4.0 for transactions on a replica set.
  • Present starting in 4.2 for transactions on a sharded cluster if $currentOp is run without localOps: true. The transaction information is per shard.
  • Present starting in 4.2.1 for transactions on a sharded cluster if $currentOp is run with localOps: true. The transaction information is a composite view rather than per shard.
$currentOp.transaction.parameters

A document that contains information on multi-document transaction.

Only present if the operation is part of a multi-document transaction.

New in version 4.0.

$currentOp.transaction.parameters.txnNumber

The transaction number.

Only present if the operation is part of a multi-document transaction.

New in version 4.0.

$currentOp.transaction.parameters.autocommit

A boolean flag that indicates if autocommit is on for the transaction.

Only present if the operation is part of a multi-document transaction.

New in version 4.0.2.

$currentOp.transaction.parameters.readConcern

The read concern for the transaction.

Multi-document transactions support read concern "snapshot", "local", and "majority".

Only present if the operation is part of a multi-document transaction.

New in version 4.0.2.

$currentOp.transaction.globalReadTimestamp

The timestamp of the snapshot read by the operations in the sharded cluster transaction that uses “snapshot” read concern. For transactions on sharded clusters, the read concern snapshot of the data is synchronized across shards; i.e. other read concerns cannot guarantee that the data is from the same snapshot view across the shards.

Only present when run with localOps: true for sharded cluster transactions.

New in version 4.2.1.

$currentOp.transaction.readTimestamp

The timestamp of the snapshot being read by the operations in this transaction

Only present if the operation is part of a multi-document transaction. However, the field is not returned if:

Instead, $currentOp.transaction.globalReadTimestamp is returned.

New in version 4.0.2.

$currentOp.transaction.startWallClockTime

The date and time (with time zone) of the transaction start.

Only present if the operation is part of a multi-document transaction.

New in version 4.0.2.

$currentOp.transaction.timeOpenMicros

The duration, in microseconds, for the transaction.

The timeActiveMicros value added to the timeInactiveMicros should equal the timeOpenMicros.

Only present if the operation is part of a multi-document transaction.

New in version 4.0.2.

$currentOp.transaction.timeActiveMicros

The total amount of time that the transaction has been active; i.e. when the transaction had operations running.

The timeActiveMicros value added to the timeInactiveMicros should equal the timeOpenMicros.

Only present if the operation is part of a multi-document transaction.

New in version 4.0.2.

$currentOp.transaction.timeInactiveMicros

The total amount of time that the transaction has been inactive; i.e. when the transaction had no operations running.

The timeInactiveMicros value added to the timeActiveMicros should equal the timeOpenMicros.

Only present if the operation is part of a multi-document transaction.

$currentOp.transaction.numParticipants

Number of shards participating in this transaction.

Only present if the operation is part of a transaction on a sharded cluster and $currentOp is run with localOps: true

New in version 4.2.1.

$currentOp.transaction.participants

An array of documents detailing the participating shardas in this transaction. Each document contains the name, a flag indicating if the shard acts as the commit coordinator, and a flag indicating if the shard is only involved in read operations for the transaction.

{
   "name" : "shardA",
   "coordinator" : false,
   "readOnly" : false
}

Only present if the operation is part of a transaction on a sharded cluster and $currentOp is run with localOps: true

New in version 4.2.1.

$currentOp.transaction.numReadOnlyParticipants

Number of shards only affected by read operations in this transaction.

Only present if the operation is part of a transaction on a sharded cluster and $currentOp is run with localOps: true

New in version 4.2.1.

$currentOp.transaction.numNonReadOnlyParticipants

Number of shards affected by operations other than reads in this transaction.

Only present if the operation is part of a transaction on a sharded cluster and $currentOp is run with localOps: true

New in version 4.2.1.

$currentOp.transaction.expiryTime

The date and time (with time zone) when the transaction will time out and abort.

The $currentOp.transaction.expiryTime equals the $currentOp.transaction.startWallClockTime + the transactionLifetimeLimitSeconds.

For more information, seee Runtime Limit for transactions.

Only present if the operation is part of a multi-document transaction.

New in version 4.0.2.

$currentOp.op

A string that identifies the specific operation type. Only present if $currentOp.type is op.

The possible values are:

  • "none"
  • "update"
  • "insert"
  • "query"
  • "command"
  • "getmore"
  • "remove"
  • "killcursors"

"command" operations include most commands such as the createIndexes, aggregate, and findandmodify.

"query" operations include find operations and OP_QUERY operations.

$currentOp.ns

The namespace the operation targets. A namespace consists of the database name and the collection name concatenated with a dot (.); that is, "<database>.<collection>".

$currentOp.command

Changed in version 3.6.

A document containing the full command object associated with this operation.

For example, the following output contains the command object for a find operation on a collection named items in a database named test:

"command" : {
  "find" : "items",
  "filter" : {
    "sku" : 1403978
  },
  ...
  "$db" : "test"
}

The following example output contains the command object for a getMore operation generated by a command with cursor id 19234103609 on a collection named items in a database named test:

"command" : {
    "getMore" : NumberLong("19234103609"),
    "collection" : "items",
    "batchSize" : 10,
    ...
    "$db" : "test"
},

If the command document exceeds 1 kilobyte, the document has the following form:

"command" : {
  "$truncated": <string>,
  "comment": <string>
}

The $truncated field contains a string summary of the document excluding the document’s comment field if present. If the summary still exceeds 1 kilobyte then it is further truncated, denoted by an ellipsis (…) at the end of the string.

The comment field is present if a comment was passed to the operation. Starting in MongoDB 4.4, a comment may be attached to any database command.

$currentOp.cursor

New in version 4.2.

A document that contains the cursor information for idleCursor and getmore operations; i.e. where type is idleCursor or op is getmore.

If reporting on a getmore operation before the getmore has accessed its cursor information, the cursor field is not available.

$currentOp.cursor.cursorId

New in version 4.2.

The id of the cursor.

$currentOp.cursor.createdDate

New in version 4.2.

The date and time when the cursor was created.

$currentOp.cursor.lastAccessDate

New in version 4.2.

The date and time when the cursor was last used.

If the cursor is actively in use (i.e. op is getmore and the type is not idleCursor), then lastAccessDate reports either the time the previous getmore ended or the time the cursor was created if this is the first getmore.

$currentOp.cursor.nDocsReturned

New in version 4.2.

The cumulative number of documents returned by the cursor.

$currentOp.cursor.nBatchesReturned

New in version 4.2.

The curmulative number of batches returned by the cursor.

$currentOp.cursor.noCursorTimeout

New in version 4.2.

The flag that indicates that the cursor will not timeout when idle; i.e. if the cursor has the noTimeout option set.

  • If true, the cursor does not time out when idle.
  • If false, the cursor will time out when idle.
$currentOp.cursor.tailable

New in version 4.2.

The flag that indicates if the cursor is a tailable cursor for a capped collection. Tailable cursors remain open after the client exhausts the results in the initial cursor.

$currentOp.cursor.awaitData

New in version 4.2.

The flag that indicates whether the tailable cursor should temporarily block a getMore command on the cursor while waiting for new data rather than returning no data.

For non-tailable cursors, the value is always false.

$currentOp.cursor.originatingCommand

New in version 4.2.

The originatingCommand field contains the full command object (e.g. find or aggregate) which originally created the cursor.

Note

Starting in version 4.2, MongoDB now returns originatingCommand field as a nested field in the new cursor field. In previous versions, the originatingCommand was a top-level field for the associated "getmore" document.

$currentOp.cursor.planSummary

New in version 4.2.

A string that specifies whether the cursor uses a collection scan (COLLSCAN) or an index scan (IXSCAN { ... }).

The IXSCAN also includes the specification document of the index used.

Not available when running with localOps: true on mongos or when reporting on idleCursors.

$currentOp.cursor.operationUsingCursorId

New in version 4.2.

The opid of the operation using the cursor.

Only present if the cursor is not idle.

$currentOp.planSummary

A string that specifies whether the cursor uses a collection scan (COLLSCAN) or an index scan (IXSCAN { ... }).

Not available when running with localOps: true on mongos.

$currentOp.prepareReadConflicts

The number of times the current operation had to wait for a prepared transaction with a write to commit or abort.

While waiting, the operation continues to hold any necessary locks and storage engine resources.

New in version 4.2.

$currentOp.writeConflicts

The number of times the current operation conflicted with another write operation on the same document.

New in version 4.2.

$currentOp.numYields

numYields is a counter that reports the number of times the operation has yielded to allow other operations to complete.

Typically, operations yield when they need access to data that MongoDB has not yet fully read into memory. This allows other operations that have data in memory to complete quickly while MongoDB reads in data for the yielding operation.

$currentOp.dataThroughputLastSecond

Amount of data (in MiB) processed by the validate operation in the last second. Only available for a validate operation that is currently scanning documents. For example:

"msg" : "Validate: scanning documents Validate: scanning documents: 7258/24000 30%",
"progress" : {
   "done" : 7258,
   "total" : 24000
},
"numYields" : 0,
"dataThroughputLastSecond" : 15.576952934265137,
"dataThroughputAverage" : 15.375944137573242,

New in version 4.4.

$currentOp.dataThroughputAverage

The average amount of data (in MiB) processed by the validate operation. Only available for a validate operation that is currently scanning documents. For example:

"msg" : "Validate: scanning documents Validate: scanning documents: 7258/24000 30%",
"progress" : {
   "done" : 7258,
   "total" : 24000
},
"numYields" : 0,
"dataThroughputLastSecond" : 15.576952934265137,
"dataThroughputAverage" : 15.375944137573242,

New in version 4.4.

$currentOp.waitingForLatch

The waitingForLatch document is only available if the operation is waiting to acquire an internal locking primitive (a.k.a. a latch) or for an internal condition to be met.

For example,

"waitingForLatch" : {
   "timestamp" : ISODate("2020-03-19T23:25:58.412Z"),
   "captureName" : "FutureResolution",
   "backtrace" : [ ]   // Only if backtrace: true
},
Output Field Description
timestamp The date and time at which the operation started to wait.
captureName The internal name of the section where the operation is currently blocked.
backtrace The callstack, if available. The field is only included if backtrace: true.

New in version 4.2.2.

$currentOp.locks

The locks document reports the type and mode of locks the operation currently holds. The possible lock types are as follows:

Lock Type Description
ParallelBatchWriterMode

Represents a lock for parallel batch writer mode.

In earlier versions, PBWM information was reported as part of the Global lock information.

New in version 4.2.

ReplicationStateTransition

Represents lock taken for replica set member state transitions.

New in version 4.2.

Global Represents global lock.
Database Represents database lock.
Collection Represents collection lock.
Mutex Represents mutex.
Metadata Represents metadata lock.
oplog Represents lock on the oplog.

The possible modes are as follows:

Lock Mode Description
R Represents Shared (S) lock.
W Represents Exclusive (X) lock.
r Represents Intent Shared (IS) lock.
w Represents Intent Exclusive (IX) lock.
$currentOp.lockStats

For each lock type and mode (see locks for descriptions of lock types and modes), returns the following information:

$currentOp.lockStats.acquireCount

Number of times the operation acquired the lock in the specified mode.

$currentOp.lockStats.acquireWaitCount

Number of times the operation had to wait for the acquireCount lock acquisitions because the locks were held in a conflicting mode. acquireWaitCount is less than or equal to acquireCount.

$currentOp.lockStats.timeAcquiringMicros

Cumulative time in microseconds that the operation had to wait to acquire the locks.

timeAcquiringMicros divided by acquireWaitCount gives an approximate average wait time for the particular lock mode.

$currentOp.lockStats.deadlockCount

Number of times the operation encountered deadlocks while waiting for lock acquisitions.

$currentOp.waitingForLock

Returns a boolean value. waitingForLock is true if the operation is waiting for a lock and false if the operation has the required lock.

$currentOp.msg

The msg provides a message that describes the status and progress of the operation. In the case of indexing or mapReduce operations, the field reports the completion percentage.

$currentOp.progress

Reports on the progress of mapReduce or indexing operations. The progress fields corresponds to the completion percentage in the msg field. The progress specifies the following information:

$currentOp.progress.done

Reports the number of work items completed.

$currentOp.progress.total

Reports the total number of work items.

$currentOp.killPending

Returns true if the operation is currently flagged for termination. When the operation encounters its next safe termination point, the operation will terminate.

$currentOp.waitingForFlowControl

A boolean that indicates if the operation had to wait because of flow control.

New in version 4.2.

$currentOp.flowControlStats

The flow control statistics for this operation.

New in version 4.2.

$currentOp.flowControlStats.acquireCount

The number of times this operation acquired a ticket.

New in version 4.2.

$currentOp.flowControlStats.acquireWaitCount

The number of times this operation waited to aqcuire a ticket.

New in version 4.2.

$currentOp.flowControlStats.timeAcquiringMicros

The total time this operation has waited to acquire a ticket.

New in version 4.2.