code: 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();
                          }
                      }
                  });
              }
          };
      }
docs: Gets an operation whose execution explains this operation.
  
  @param explainVerbosity the explain verbosity
  @return a read operation that when executed will explain this operation