(ns document-storage.query) (defn query-fits? [data query] (reduce (fn [a b] (and (true? a) (= a b))) (map (fn [[key [compare-fn val]]] (compare-fn (key data) val)) query))) (defn update-queries [queries id new-document] (into {} (mapv (fn [[query docs]] (if (query-fits? new-document query) [query (assoc docs id new-document)] [query (dissoc docs id)])) queries)))