code: def _index_document(index_list):
      
      if isinstance(index_list, abc.Mapping):
          raise TypeError("passing a dict to sort/create_index/hint is not "
                          "allowed - use a list of tuples instead. did you "
                          "mean %r?" % list(iteritems(index_list)))
      elif not isinstance(index_list, (list, tuple)):
          raise TypeError("must use a list of (key, direction) pairs, "
                          "not: " + repr(index_list))
      if not len(index_list):
          raise ValueError("key_or_list must not be the empty list")
  
      index = SON()
      for (key, value) in index_list:
          if not isinstance(key, string_type):
              raise TypeError("first item in each key pair must be a string")
          if not isinstance(value, (string_type, int, abc.Mapping)):
              raise TypeError("second item in each key pair must be 1, -1, "
                              "'2d', 'geoHaystack', or another valid MongoDB "
                              "index specifier.")
          index[key] = value
      return index
docs: Helper to generate an index specifying document.
  
      Takes a list of (key, direction) pairs.