- Reference >
- Operators >
- Aggregation Pipeline Stages >
- $currentOp (aggregation)
$currentOp (aggregation)¶
On this page
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 thedb.aggregate()helper on theadmindatabase.The
$currentOpaggregation stage is preferred over thecurrentOpcommand and itsmongoshell helperdb.currentOp(). BecausecurrentOpcommand anddb.currentOp()helper returns the results in a single document, the total size of thecurrentOpresult set is subject to the maximum 16MB BSON size limit for documents. The$currentOpstage 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 thecurrentOpcommand, there is no limit on the overall size of the result set.$currentOpalso enables you to perform arbitrary transformations of the results as the documents pass through the pipeline.
Syntax¶
Changed in version 4.2.
$currentOp takes an options document as its operand:
| Option | Description |
|---|---|
| allUsers | Boolean.
Note For standalone and replica sets that enforce access control,
For sharded clusters that enforce access control, the Defaults to |
| idleConnections | Boolean. If set to Defaults to |
| idleCursors | Boolean. If set to Information on idle cursors have the Information on cursors currently active in a
Defaults to New in version 4.2. |
| idleSessions | Boolean.
Defaults to New in version 4.0. |
| localOps | Boolean. If set to The Defaults to New in version 4.0. |
| backtrace | Boolean. Determines whether callstack information is returned as
part of the
Defaults to 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.
Constraints¶
Pipeline¶
$currentOpmust be the first stage in the pipeline.- Pipelines that start with
$currentOpcan only be run on theadmindatabase.
Access Control¶
- For standalone and replica sets that enforce access control,
inprogprivilege is required to run$currentOpif allUsers: true. - For sharded clusters that enforce access control, the
inprogprivilege is required to run$currentOp.
Transactions¶
$currentOpis not allowed in 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.
Starting in version 4.2, you can use $currentOp.type to specify
an equivalent filter:
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:
- Replica Set
- Sharded Cluster (localOps: true)
- Sharded Cluster
When run on a mongod that is part of a replica set:
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.
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.
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:
opidleSessionidleCursor
If the
$currentOp.typeisop,$currentOp.opprovides 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.clientstores 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
mongoswhere the operation originates.For sharded clusters only
-
$currentOp.clientMetadata¶ Additional information on the client.
For multi-document transactions,
$currentOp.clientstores 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
appNameconnection string option to set a custom value for theappNamefield.
-
$currentOp.active¶ A boolean value specifying whether the operation has started. Value is
trueif the operation has started orfalseif 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 amongosor 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:
A specific commit coordination operation (i.e.
typeisopanddescis"TransactionCoordinator") spawned by the transaction coordinator.
Note
- If run with idleSessions: false,
$currentOpdoes not return the$currentOp.twoPhaseCommitCoordinatorinformation ininactivestate - If access control is enabled and allUsers: false,
$currentOpdoes not return$currentOp.twoPhaseCommitCoordinatorinformation.
New in version 4.2.1.
-
$currentOp.twoPhaseCommitCoordinator.lsid¶ The session identifier for the multi-shard transaction.
The combination of the
lsidandtxnNumberidentifies 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
txnNumberandlsididentifies 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 inactiveNot actively part of a commit. writingParticipantListWriting a local record of the list of shards that are part of this multi-shard transaction. waitingForVotesWaiting for the participants to respond with vote to commit or abort. writingDecisionWriting a local record of the coordinator’s decision to commit or abort based on votes. waitingForDecisionAckWaiting for participants to acknowledge the coordinator’s decision to commit or abort. deletingCoordinatorDocDeleting 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
hasRecoveredFromFailoveris true, then the times specified in$currentOp.twoPhaseCommitCoordinator.stepDurationsmay 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/stateof the active process as well as the cumulative total duration; for example:If
$currentOp.twoPhaseCommitCoordinator.hasRecoveredFromFailoveris true, then the times specified instepDurationsmay not be accurate for all steps.For a coordinator in an
inactivestate, the document is empty: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:
For an abort decision:
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
username and the authenticationdb.See also
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 theusername and the authenticationdb. In general, the impersonating user is the__systemuser; e.g.New in version 4.2.
-
$currentOp.opid¶ The identifier for the operation. You can pass this value to
db.killOp()in themongoshell 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
activeistrue.
-
$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
activeistrue.
-
$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
$currentOpis run without localOps: true. The transaction information is per shard. - Present starting in 4.2.1 for transactions on a sharded cluster if
$currentOpis 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
snapshotof 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:
- the transaction is on a sharded cluster and uses “snapshot” read concern, and
$currentOpis run with localOps: true.
Instead,
$currentOp.transaction.globalReadTimestampis 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
timeActiveMicrosvalue added to thetimeInactiveMicrosshould equal thetimeOpenMicros.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
timeActiveMicrosvalue added to thetimeInactiveMicrosshould equal thetimeOpenMicros.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
timeInactiveMicrosvalue added to thetimeActiveMicrosshould equal thetimeOpenMicros.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
$currentOpis run with localOps: trueNew 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.
Only present if the operation is part of a transaction on a sharded cluster and
$currentOpis run with localOps: trueNew 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
$currentOpis run with localOps: trueNew 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
$currentOpis run with localOps: trueNew 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.expiryTimeequals the$currentOp.transaction.startWallClockTime+ thetransactionLifetimeLimitSeconds.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.typeisop.The possible values are:
"none""update""insert""query""command""getmore""remove""killcursors"
"command"operations include most commands such as thecreateIndexes,aggregate, andfindandmodify."query"operations includefindoperations 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
findoperation on a collection nameditemsin a database namedtest:The following example output contains the command object for a
getMoreoperation generated by a command with cursor id19234103609on a collection nameditemsin a database namedtest:If the command document exceeds 1 kilobyte, the document has the following form:
The
$truncatedfield contains a string summary of the document excluding the document’scommentfield 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
commentfield 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
idleCursorandgetmoreoperations; i.e. wheretypeisidleCursororopisgetmore.If reporting on a
getmoreoperation before thegetmorehas accessed its cursor information, thecursorfield 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.
opisgetmoreand thetypeis notidleCursor), thenlastAccessDatereports either the time the previousgetmoreended or the time the cursor was created if this is the firstgetmore.
-
$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
noTimeoutoption set.- If true, the cursor does not time out when idle.
- If false, the cursor will time out when idle.
See also
-
$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.
See also
-
$currentOp.cursor.awaitData¶ New in version 4.2.
The flag that indicates whether the tailable cursor should temporarily block a
getMorecommand on the cursor while waiting for new data rather than returning no data.For non-tailable cursors, the value is always false.
See also
-
$currentOp.cursor.originatingCommand¶ New in version 4.2.
The
originatingCommandfield contains the full command object (e.g.findoraggregate) which originally created the cursor.Note
Starting in version 4.2, MongoDB now returns
originatingCommandfield as a nested field in the newcursorfield. In previous versions, theoriginatingCommandwas 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
IXSCANalso includes the specification document of the index used.Not available when running with
localOps: trueonmongosor when reporting onidleCursors.
-
$currentOp.cursor.operationUsingCursorId¶ New in version 4.2.
The
opidof 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: trueonmongos.
-
$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¶ numYieldsis 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
validateoperation in the last second. Only available for avalidateoperation that is currently scanning documents. For example:New in version 4.4.
-
$currentOp.dataThroughputAverage¶ The average amount of data (in MiB) processed by the
validateoperation. Only available for avalidateoperation that is currently scanning documents. For example:New in version 4.4.
-
$currentOp.waitingForLatch¶ The
waitingForLatchdocument 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,
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
locksdocument reports the type and mode of locks the operation currently holds. The possible lock types are as follows:Lock Type Description ParallelBatchWriterModeRepresents a lock for parallel batch writer mode.
In earlier versions, PBWM information was reported as part of the
Globallock information.New in version 4.2.
ReplicationStateTransitionRepresents lock taken for replica set member state transitions.
New in version 4.2.
GlobalRepresents global lock. DatabaseRepresents database lock. CollectionRepresents collection lock. MutexRepresents mutex. MetadataRepresents metadata lock. oplogRepresents lock on the oplog. The possible modes are as follows:
Lock Mode Description RRepresents Shared (S) lock. WRepresents Exclusive (X) lock. rRepresents Intent Shared (IS) lock. wRepresents Intent Exclusive (IX) lock.
-
$currentOp.lockStats¶ For each lock type and mode (see
locksfor 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
acquireCountlock acquisitions because the locks were held in a conflicting mode.acquireWaitCountis less than or equal toacquireCount.
-
$currentOp.lockStats.timeAcquiringMicros¶ Cumulative time in microseconds that the operation had to wait to acquire the locks.
timeAcquiringMicrosdivided byacquireWaitCountgives 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.
waitingForLockistrueif the operation is waiting for a lock andfalseif the operation has the required lock.
-
$currentOp.msg¶ The
msgprovides 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
progressfields corresponds to the completion percentage in themsgfield. Theprogressspecifies 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
trueif 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.
-