The issue is you need set equality on the actual set
(d/q '[:in $ ?needle
:find (pull ?e [:community/name :community/category])
:where
[?e :community/category]
[(datomic.api/entity $ ?e) ?fat]
[(get ?fat :community/category) ?cs]
[(= ?cs ?needle)]]
$ #{"events" "news"})
=>
[[#:community{:name "belltown", :category ["events" "news"]}]
[#:community{:name "Greenwood Blog", :category ["events" "news"]}]]
You can also define your own peer functions (if peer):
(defn f [$ e needle]
(let [en (->> e (d/entity $) :community/category)]
#_(println needle en)
(= needle en)))
(->> (d/q '[:in $ ?needle
:find (pull ?e [:community/name :community/category])
:where
[?e :community/category]
[(user/f $ ?e ?needle)]]
$ #{"events" "news"}))
=> #'user/f
=>
[[#:community{:name "belltown", :category ["events" "news"]}]
[#:community{:name "Greenwood Blog", :category ["events" "news"]}]]