New in version 1.4.
Definition
Parameters
- $explainable:- MongoDB\Operation\Explainable
- The command to explain.
- $options: array
- An array specifying the desired options. NameTypeDescription- comment - mixed - Enables users to specify an arbitrary comment to help trace the operation through the database profiler, currentOp output, and logs. - This option is available since MongoDB 4.4 and will result in an exception at execution time if specified for an older server version. - Defaults to the - commentof the explained operation (if any).- New in version 1.13. - readPreference - Read preference to use for the operation. Defaults to the collection's read preference. - typeMap - array - The type map to apply to cursors, which determines how BSON documents are converted to PHP values. Defaults to the collection's type map. - This will be used for the returned command result document. - verbosity - string - The verbosity level at which to run the command. See the explain command for more information. 
Return Values
An array or object with the result document of the explain command. The return type will depend on the
typeMap option.
Errors/Exceptions
MongoDB\Exception\UnsupportedException if options are used and
not supported by the selected server (e.g. collation, readConcern,
writeConcern).
MongoDB\Exception\InvalidArgumentException for errors related to
the parsing of parameters or options.
MongoDB\Driver\Exception\RuntimeException for other errors at the extension level (e.g. connection errors).
Explainable Commands
Explainable commands include, but are not limited to:
- MongoDB\Operation\Aggregate
- MongoDB\Operation\Count
- MongoDB\Operation\DeleteMany
- MongoDB\Operation\DeleteOne
- MongoDB\Operation\Distinct
- MongoDB\Operation\Find
- MongoDB\Operation\FindOne
- MongoDB\Operation\FindOneAndDelete
- MongoDB\Operation\FindOneAndReplace
- MongoDB\Operation\FindOneAndUpdate
- MongoDB\Operation\UpdateMany
- MongoDB\Operation\UpdateOne
Examples
This example explains a count command.
$collection = (new MongoDB\Client)->test->restaurants; $count = new MongoDB\Operation\Count(     $collection->getDatabaseName(),     $collection->getCollectionName(),     ['cuisine' => 'Italian'] ); $result = $collection->explain($count); var_dump($result); 
The output would then resemble:
object(MongoDB\Model\BSONDocument)#29 (1) {   ["storage":"ArrayObject":private]=>   array(4) {     ["queryPlanner"]=>     object(MongoDB\Model\BSONDocument)#21 (1) {       ["storage":"ArrayObject":private]=>       array(6) {         ["plannerVersion"]=>         int(1)         ["namespace"]=>         string(16) "test.restaurants"         ["indexFilterSet"]=>         bool(false)         ["parsedQuery"]=>         object(MongoDB\Model\BSONDocument)#15 (1) {           ["storage":"ArrayObject":private]=>           array(1) {             ["cuisine"]=>             object(MongoDB\Model\BSONDocument)#14 (1) {               ["storage":"ArrayObject":private]=>               array(1) {                 ["$eq"]=>                 string(7) "Italian"               }             }           }         }         ["winningPlan"]=>         object(MongoDB\Model\BSONDocument)#19 (1) {           ["storage":"ArrayObject":private]=>           array(2) {             ["stage"]=>             string(5) "COUNT"             ["inputStage"]=>             object(MongoDB\Model\BSONDocument)#18 (1) {               ["storage":"ArrayObject":private]=>               array(3) {                 ["stage"]=>                 string(8) "COLLSCAN"                 ["filter"]=>                 object(MongoDB\Model\BSONDocument)#17 (1) {                   ["storage":"ArrayObject":private]=>                   array(1) {                     ["cuisine"]=>                     object(MongoDB\Model\BSONDocument)#16 (1) {                       ["storage":"ArrayObject":private]=>                       array(1) {                         ["$eq"]=>                         string(7) "Italian"                       }                     }                   }                 }                 ["direction"]=>                 string(7) "forward"               }             }           }         }         ["rejectedPlans"]=>         object(MongoDB\Model\BSONArray)#20 (1) {           ["storage":"ArrayObject":private]=>           array(0) {           }         }       }     }     ["executionStats"]=>     object(MongoDB\Model\BSONDocument)#27 (1) {       ["storage":"ArrayObject":private]=>       array(7) {         ["executionSuccess"]=>         bool(true)         ["nReturned"]=>         int(0)         ["executionTimeMillis"]=>         int(24)         ["totalKeysExamined"]=>         int(0)         ["totalDocsExamined"]=>         int(25359)         ["executionStages"]=>         object(MongoDB\Model\BSONDocument)#25 (1) {           ["storage":"ArrayObject":private]=>           array(14) {             ["stage"]=>             string(5) "COUNT"             ["nReturned"]=>             int(0)             ["executionTimeMillisEstimate"]=>             int(20)             ["works"]=>             int(25361)             ["advanced"]=>             int(0)             ["needTime"]=>             int(25360)             ["needYield"]=>             int(0)             ["saveState"]=>             int(198)             ["restoreState"]=>             int(198)             ["isEOF"]=>             int(1)             ["invalidates"]=>             int(0)             ["nCounted"]=>             int(1069)             ["nSkipped"]=>             int(0)             ["inputStage"]=>             object(MongoDB\Model\BSONDocument)#24 (1) {               ["storage":"ArrayObject":private]=>               array(14) {                 ["stage"]=>                 string(8) "COLLSCAN"                 ["filter"]=>                 object(MongoDB\Model\BSONDocument)#23 (1) {                   ["storage":"ArrayObject":private]=>                   array(1) {                     ["cuisine"]=>                     object(MongoDB\Model\BSONDocument)#22 (1) {                       ["storage":"ArrayObject":private]=>                       array(1) {                         ["$eq"]=>                         string(7) "Italian"                       }                     }                   }                 }                 ["nReturned"]=>                 int(1069)                 ["executionTimeMillisEstimate"]=>                 int(20)                 ["works"]=>                 int(25361)                 ["advanced"]=>                 int(1069)                 ["needTime"]=>                 int(24291)                 ["needYield"]=>                 int(0)                 ["saveState"]=>                 int(198)                 ["restoreState"]=>                 int(198)                 ["isEOF"]=>                 int(1)                 ["invalidates"]=>                 int(0)                 ["direction"]=>                 string(7) "forward"                 ["docsExamined"]=>                 int(25359)               }             }           }         }         ["allPlansExecution"]=>         object(MongoDB\Model\BSONArray)#26 (1) {           ["storage":"ArrayObject":private]=>           array(0) {           }         }       }     }     ["serverInfo"]=>     object(MongoDB\Model\BSONDocument)#28 (1) {       ["storage":"ArrayObject":private]=>       array(4) {         ["host"]=>         string(9) "localhost"         ["port"]=>         int(27017)         ["version"]=>         string(5) "3.6.1"         ["gitVersion"]=>         string(40) "025d4f4fe61efd1fb6f0005be20cb45a004093d1"       }     }     ["ok"]=>     float(1)   } } 
See Also
- explain command reference in the MongoDB manual