code: def query(self, properties=None, criteria=None, distinct_key=None,
                **kwargs):
          if properties is not None:
              props, prop_dict = self._parse_properties(properties)
          else:
              props, prop_dict = None, None
          crit = self._parse_criteria(criteria)
          if self.query_post:
              for func in self.query_post:
                  func(crit, props)
          cur = self.collection.find(filter=crit, projection=props, **kwargs)
          if distinct_key is not None:
              cur = cur.distinct(distinct_key)
              return QueryListResults(prop_dict, cur, postprocess=self.result_post)
          else:
              return QueryResults(prop_dict, cur, postprocess=self.result_post)