docs: def _filter(self, criteria: Q, db):
          """Recursive function to filter items from dictionary"""
          # Filter the dictionary objects based on the filters
          negated = criteria.negated
          input_db = None
  
          if criteria.connector == criteria.AND:
              # Trim database records over successive iterations
              #   Whatever is left at the end satisfy all criteria (AND)
              input_db = db
              for child in criteria.children:
                  if isinstance(child, Q):
                      input_db = self._filter(child, input_db)
                  else:
                      input_db = self.provider._evaluate_lookup(child[0], child[1],
                                                                negated, input_db)
          else:
              # Grow database records over successive iterations
              #   Whatever is left at the end satisfy any criteria (OR)
              input_db = {}
              for child in criteria.children:
                  if isinstance(child, Q):
                      results = self._filter(child, db)
                  else:
                      results = self.provider._evaluate_lookup(child[0], child[1], negated, db)
  
                  input_db = {**input_db, **results}
  
          return input_db