- 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.$currentOptakes an options document as its operand:Changed in version 4.0.
Option Description allUsersBoolean. If set to
false,$currentOpwill only report operations belonging to the user who ran the command. If set totrue,$currentOpwill report operations belonging to all users.Note
The
inprogprivilege is necessary to run$currentOpwith{ allUsers : true }.Defaults to
false.idleConnectionsBoolean. If set to
false,$currentOpwill only report active operations. If set totrue, all operations including idle connections will be returned.Defaults to
false.idleSessionsBoolean. If set to
true, then in addition to reporting on the active/dormant operations,$currentOpreturns information on inactive sessions that are holding locks as part of a transaction. Each inactive session will appear as a separate document in the$currentOpstream.The document for a session includes information on the session id in the
lsidfield and the transaction in thetransactionfield.If set to
false,$currentOpwill not report on inactive sessions.Defaults to
true.New in version 4.0.
localOpsBoolean. If set to
truefor an aggregation running onmongos,$currentOpreports only those operations running locally on thatmongos. Iffalse, then the$currentOpwill instead report operations running on the shards.The
localOpsparameter has no effect for$currentOpaggregations running onmongod.Defaults to
false.New in version 4.0.
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¶
$currentOpmust be the first stage in the pipeline.- Pipelines that start with
$currentOpcan only be run on theadmindatabase. - On a standalone or replica set with authentication enabled, the
inprogprivilege is required to run$currentOpif theallUsersparameter is set to true. - On a sharded cluster, the
inprogprivilege is required to run all$currentOppipelines. $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.
The operation returns documents of the form:
Output Fields¶
Each output document may contain a subset of the following fields as relevant for the 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.currentOpTime¶ The start time of the operation.
New in version 3.6.
-
$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.
New in version 4.0.
-
$currentOp.transaction.parameters¶ A document that contains information on multi-document transaction.
Only present if the operation is part of a transaction.
New in version 4.0.
-
$currentOp.transaction.parameters.txnNumber¶ The transaction number.
Only present if the operation is part of a 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 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 transaction.
New in version 4.0.2.
-
$currentOp.transaction.readTimestamp¶ The timestamp of the snapshot being read by the operations in the transaction.
Only present if the operation is part of a transaction.
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 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 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 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 transaction.
-
$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 transaction.
New in version 4.0.2.
-
-
-
$currentOp.op¶ A string that identifies the type of operation. 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. 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.The following example 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 id80336119321on a collection nameditemsin a database namedtest:
-
$currentOp.originatingCommand¶ Changed in version 3.6: For
"getmore"operations which retrieve the next batch of results from a cursor, theoriginatingCommandfield contains the full command object (e.g.findoraggregate) which originally created that cursor.
-
$currentOp.planSummary¶ A string that contains the query plan to help debug slow queries.
-
$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.locks¶ The
locksdocument reports the type and mode of locks the operation currently holds. The possible lock types are as follows:Lock Type Description GlobalRepresents global lock. MMAPV1JournalRepresents MMAPv1 storage engine specific lock to synchronize journal writes; for non-MMAPv1 storage engines, the mode for MMAPV1Journalis empty.DatabaseRepresents database lock. CollectionRepresents collection lock. 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.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.lockStats¶ For each lock type and mode (see
$currentOp.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.
-