docs: def command(self, dbname, spec, slave_ok=False,
                  read_preference=ReadPreference.PRIMARY,
                  codec_options=DEFAULT_CODEC_OPTIONS, check=True,
                  allowable_errors=None, check_keys=False,
                  read_concern=DEFAULT_READ_CONCERN,
                  write_concern=None,
                  parse_write_concern_error=False,
                  collation=None):
          """Execute a command or raise ConnectionFailure or OperationFailure.
  
          :Parameters:
            - `dbname`: name of the database on which to run the command
            - `spec`: a command document as a dict, SON, or mapping object
            - `slave_ok`: whether to set the SlaveOkay wire protocol bit
            - `read_preference`: a read preference
            - `codec_options`: a CodecOptions instance
            - `check`: raise OperationFailure if there are errors
            - `allowable_errors`: errors to ignore if `check` is True
            - `check_keys`: if True, check `spec` for invalid keys
            - `read_concern`: The read concern for this command.
            - `write_concern`: The write concern for this command.
            - `parse_write_concern_error`: Whether to parse the
              ``writeConcernError`` field in the command response.
            - `collation`: The collation for this command.
          """
          if self.max_wire_version < 4 and not read_concern.ok_for_legacy:
              raise ConfigurationError(
                  'read concern level of %s is not valid '
                  'with a max wire version of %d.'
                  % (read_concern.level, self.max_wire_version))
          if not (write_concern is None or write_concern.acknowledged or
                  collation is None):
              raise ConfigurationError(
                  'Collation is unsupported for unacknowledged writes.')
          if self.max_wire_version >= 5 and write_concern:
              spec['writeConcern'] = write_concern.document
          elif self.max_wire_version < 5 and collation is not None:
              raise ConfigurationError(
                  'Must be connected to MongoDB 3.4+ to use a collation.')
          try:
              return command(self.sock, dbname, spec, slave_ok,
                             self.is_mongos, read_preference, codec_options,
                             check, allowable_errors, self.address,
                             check_keys, self.listeners, self.max_bson_size,
                             read_concern,
                             parse_write_concern_error=parse_write_concern_error,
                             collation=collation)
          except OperationFailure:
              raise
          # Catch socket.error, KeyboardInterrupt, etc. and close ourselves.
          except BaseException as error:
              self._raise_connection_failure(error)