docs: def create_index(self, keys, **kwargs):
          """Creates an index on this collection.
  
          Takes either a single key or a list of (key, direction) pairs.
          The key(s) must be an instance of :class:`basestring`
          (:class:`str` in python 3), and the direction(s) must be one of
          (:data:`~pymongo.ASCENDING`, :data:`~pymongo.DESCENDING`,
          :data:`~pymongo.GEO2D`, :data:`~pymongo.GEOHAYSTACK`,
          :data:`~pymongo.GEOSPHERE`, :data:`~pymongo.HASHED`,
          :data:`~pymongo.TEXT`).
  
          To create a single key ascending index on the key ``'mike'`` we just
          use a string argument::
  
            >>> my_collection.create_index("mike")
  
          For a compound index on ``'mike'`` descending and ``'eliot'``
          ascending we need to use a list of tuples::
  
            >>> my_collection.create_index([("mike", pymongo.DESCENDING),
            ...                             ("eliot", pymongo.ASCENDING)])
  
          All optional index creation parameters should be passed as
          keyword arguments to this method. For example::
  
            >>> my_collection.create_index([("mike", pymongo.DESCENDING)],
            ...                            background=True)
  
          Valid options include, but are not limited to:
  
            - `name`: custom name to use for this index - if none is
              given, a name will be generated.
            - `unique`: if ``True`` creates a uniqueness constraint on the index.
            - `background`: if ``True`` this index should be created in the
              background.
            - `sparse`: if ``True``, omit from the index any documents that lack
              the indexed field.
            - `bucketSize`: for use with geoHaystack indexes.
              Number of documents to group together within a certain proximity
              to a given longitude and latitude.
            - `min`: minimum value for keys in a :data:`~pymongo.GEO2D`
              index.
            - `max`: maximum value for keys in a :data:`~pymongo.GEO2D`
              index.
            - `expireAfterSeconds`: <int> Used to create an expiring (TTL)
              collection. MongoDB will automatically delete documents from
              this collection after <int> seconds. The indexed field must
              be a UTC datetime or the data will not expire.
            - `partialFilterExpression`: A document that specifies a filter for
              a partial index.
            - `collation` (optional): An instance of
              :class:`~pymongo.collation.Collation`. This option is only supported
              on MongoDB 3.4 and above.
  
          See the MongoDB documentation for a full list of supported options by
          server version.
  
          .. warning:: `dropDups` is not supported by MongoDB 3.0 or newer. The
            option is silently ignored by the server and unique index builds
            using the option will fail if a duplicate value is detected.
  
          .. note:: `partialFilterExpression` requires server version **>= 3.2**
  
          .. note:: The :attr:`~pymongo.collection.Collection.write_concern` of
             this collection is automatically applied to this operation when using
             MongoDB >= 3.4.
  
          :Parameters:
            - `keys`: a single key or a list of (key, direction)
              pairs specifying the index to create
            - `**kwargs` (optional): any additional index creation
              options (see the above list) should be passed as keyword
              arguments
  
          .. versionchanged:: 3.4
             Apply this collection's write concern automatically to this operation
             when connected to MongoDB >= 3.4. Support the `collation` option.
          .. versionchanged:: 3.2
              Added partialFilterExpression to support partial indexes.
          .. versionchanged:: 3.0
              Renamed `key_or_list` to `keys`. Removed the `cache_for` option.
              :meth:`create_index` no longer caches index names. Removed support
              for the drop_dups and bucket_size aliases.
  
          .. mongodoc:: indexes
          """
          keys = helpers._index_list(keys)
          name = kwargs.setdefault("name", helpers._gen_index_name(keys))
          self.__create_index(keys, kwargs)
          return name