0
有没有一种方法可以在查询内纯粹表达这种逻辑?在Datomic中找到与关系中出现次数最多的实体
(def e-top
(let [res (d/q '[:find ?e (count ?p)
:where [?p :likes ?e]] db)]
(first (apply max-key last res))))
有没有一种方法可以在查询内纯粹表达这种逻辑?在Datomic中找到与关系中出现次数最多的实体
(def e-top
(let [res (d/q '[:find ?e (count ?p)
:where [?p :likes ?e]] db)]
(first (apply max-key last res))))
如果你需要一个查询中工作,那么聚集问题的汇总最好用子查询解决(嵌套调用内查询查询)。看到这个answer on the Datomic mailing list,其中包括了类似的(不相同)上聚集的结果与mbrainz查询:
(d/q '[:find ?track ?count
:where [(datomic.api/q '[:find ?track (count ?artist)
:where [?track :track/artists ?artist]] $) [[?track ?count]]]
[(> ?count 1)]]
(d/db conn))
对于你的情况(假设工作停留在Clojure的),申请将更快,更简单。只需要做一些简单的事情(例如,获取与最大值相关联的东西)的子查询往往会更有意义,如果您使用REST API或其他客户端环绕Datomic,而您没有获得与同侪图书馆正在进行中。