code: def __query_spec(self):
          
          operators = self.__modifiers.copy()
          if self.__ordering:
              operators["$orderby"] = self.__ordering
          if self.__explain:
              operators["$explain"] = True
          if self.__hint:
              operators["$hint"] = self.__hint
          if self.__comment:
              operators["$comment"] = self.__comment
          if self.__max_scan:
              operators["$maxScan"] = self.__max_scan
          if self.__max_time_ms is not None:
              operators["$maxTimeMS"] = self.__max_time_ms
          if self.__max:
              operators["$max"] = self.__max
          if self.__min:
              operators["$min"] = self.__min
          if self.__return_key:
              operators["$returnKey"] = self.__return_key
          if self.__show_record_id:
              # This is upgraded to showRecordId for MongoDB 3.2+ "find" command.
              operators["$showDiskLoc"] = self.__show_record_id
          if self.__snapshot:
              operators["$snapshot"] = self.__snapshot
  
          if operators:
              # Make a shallow copy so we can cleanly rewind or clone.
              spec = self.__spec.copy()
  
              # White-listed commands must be wrapped in $query.
              if "$query" not in spec:
                  # $query has to come first
                  spec = SON([("$query", spec)])
  
              if not isinstance(spec, SON):
                  # Ensure the spec is SON. As order is important this will
                  # ensure its set before merging in any extra operators.
                  spec = SON(spec)
  
              spec.update(operators)
              return spec
          # Have to wrap with $query if "query" is the first key.
          # We can't just use $query anytime "query" is a key as
          # that breaks commands like count and find_and_modify.
          # Checking spec.keys()[0] covers the case that the spec
          # was passed as an instance of SON or OrderedDict.
          elif ("query" in self.__spec and
                (len(self.__spec) == 1 or
                 next(iter(self.__spec)) == "query")):
              return SON({"$query": self.__spec})
  
          return self.__spec
docs: Get the spec to use for a query.