docs: def get_runs(self, sort_by=None, sort_direction=None,
                   start=0, limit=None, query={"type": "and", "filters": []}):
          """
          Return multiple runs (default all).
  
          The query format (optional):
  
          {"type": "and", "filters": [
           {"field": "host.hostname", "operator": "==", "value": "ntbacer"},
           {"type": "or", "filters": [
              {"field": "result", "operator": "==", "value": 2403.52},
              {"field": "host.python_version", "operator": "==", "value":"3.5.2"}
              ]}]}
  
          The parameter is built from clauses.
          Each clause is either conjunctive (``"and"``), disjunctive (``"or"``),
          or a *terminal clause*. Each of the the earlier two types must specify
          the ``"filters`` array of other clauses to be joined together
          by that logical connective (and/or).
  
          A terminal clause does not specifies its type, instead,
          it has a different set of fields:
          the ``field`` to be queried on (based on the MongoDB schema,
          using dot notation to access nested documents), the ``operator``
          (one of ``"=="``, ``"!="``, ``"<"``, ``"<="``, ``">``, ``">="``,
          and ``"regex"`` for regular expressions).
          The ``value`` field contains the value to be compared with
          (either a string or a number). Notice that for the ``status`` field,
          the ``RUNNING`` and ``DEAD`` runs are compared by
          :func:`~PyMongoDataAccess.RUNNING_DEAD_RUN_CLAUSE` and
          :func:`~PyMongoDataAccess.RUNNING_NOT_DEAD_CLAUSE`
          """
          mongo_query = self._to_mongo_query(query)
          r = self.generic_dao.find_records(self.collection_name, mongo_query,
                                            sort_by, sort_direction, start,
                                            limit)
          return r