public ReadOperation<BsonDocument> asExplainableOperation(final ExplainVerbosity explainVerbosity) {
    """
	Gets an operation whose execution explains this operation.
	
	@param explainVerbosity the explain verbosity
	@return a read operation that when executed will explain this operation
    """
        notNull("explainVerbosity", explainVerbosity);
        return new ReadOperation<BsonDocument>() {
            @Override
            public BsonDocument execute(final ReadBinding binding) {
                return withConnection(binding, new CallableWithConnectionAndSource<BsonDocument>() {
                    @Override
                    public BsonDocument call(final ConnectionSource connectionSource, final Connection connection) {
                        ReadBinding singleConnectionBinding = new SingleConnectionReadBinding(binding.getReadPreference(),
                                                                                              connectionSource.getServerDescription(),
                                                                                              connection);
                        try {
                            if (serverIsAtLeastVersionThreeDotTwo(connection.getDescription())) {
                                try {
                                    return new CommandReadOperation<BsonDocument>(getNamespace().getDatabaseName(),
                                                                                  new BsonDocument("explain",
                                                                                                   getCommand(binding.getSessionContext())),
                                                                                  new BsonDocumentCodec()).execute(singleConnectionBinding);
                                } catch (MongoCommandException e) {
                                    throw new MongoQueryException(e);
                                }
                            } else {
                                BatchCursor<BsonDocument> cursor = createExplainableQueryOperation().execute(singleConnectionBinding);
                                try {
                                    return cursor.next().iterator().next();
                                } finally {
                                    cursor.close();
                                }
                            }
                        } finally {
                            singleConnectionBinding.release();
                        }
                    }
                });
            }
        };
    }
public ReadOperation<BsonDocument> asExplainableOperation(final ExplainVerbosity explainVerbosity) {
        notNull("explainVerbosity", explainVerbosity);
        return new ReadOperation<BsonDocument>() {
            @Override
            public BsonDocument execute(final ReadBinding binding) {
                return withConnection(binding, new CallableWithConnectionAndSource<BsonDocument>() {
                    @Override
                    public BsonDocument call(final ConnectionSource connectionSource, final Connection connection) {
                        ReadBinding singleConnectionBinding = new SingleConnectionReadBinding(binding.getReadPreference(),
                                                                                              connectionSource.getServerDescription(),
                                                                                              connection);
                        try {
                            if (serverIsAtLeastVersionThreeDotTwo(connection.getDescription())) {
                                try {
                                    return new CommandReadOperation<BsonDocument>(getNamespace().getDatabaseName(),
                                                                                  new BsonDocument("explain",
                                                                                                   getCommand(binding.getSessionContext())),
                                                                                  new BsonDocumentCodec()).execute(singleConnectionBinding);
                                } catch (MongoCommandException e) {
                                    throw new MongoQueryException(e);
                                }
                            } else {
                                BatchCursor<BsonDocument> cursor = createExplainableQueryOperation().execute(singleConnectionBinding);
                                try {
                                    return cursor.next().iterator().next();
                                } finally {
                                    cursor.close();
                                }
                            }
                        } finally {
                            singleConnectionBinding.release();
                        }
                    }
                });
            }
        };
    }
public ReadOperation < BsonDocument > asExplainableOperation ( final ExplainVerbosity explainVerbosity ) { notNull ( "explainVerbosity" , explainVerbosity ) ; return new ReadOperation < BsonDocument > ( ) { @ Override public BsonDocument execute ( final ReadBinding binding ) { return withConnection ( binding , new CallableWithConnectionAndSource < BsonDocument > ( ) { @ Override public BsonDocument call ( final ConnectionSource connectionSource , final Connection connection ) { ReadBinding singleConnectionBinding = new SingleConnectionReadBinding ( binding . getReadPreference ( ) , connectionSource . getServerDescription ( ) , connection ) ; try { if ( serverIsAtLeastVersionThreeDotTwo ( connection . getDescription ( ) ) ) { try { return new CommandReadOperation < BsonDocument > ( getNamespace ( ) . getDatabaseName ( ) , new BsonDocument ( "explain" , getCommand ( binding . getSessionContext ( ) ) ) , new BsonDocumentCodec ( ) ) . execute ( singleConnectionBinding ) ; } catch ( MongoCommandException e ) { throw new MongoQueryException ( e ) ; } } else { BatchCursor < BsonDocument > cursor = createExplainableQueryOperation ( ) . execute ( singleConnectionBinding ) ; try { return cursor . next ( ) . iterator ( ) . next ( ) ; } finally { cursor . close ( ) ; } } } finally { singleConnectionBinding . release ( ) ; } } } ) ; } } ; }
Gets an operation whose execution explains this operation.

@param explainVerbosity the explain verbosity
@return a read operation that when executed will explain this operation
Gets an operation whose execution explains this operation .