Datomic-动态查询功能

时间:2018-06-24 18:07:27

标签: clojure datomic

我很惊讶这没有用:

(d/q '[:find [?e ...]
         :in $ ?field ?op ?value
         :where [?e ?field ?x]
                [(?op ?x ?value)]
         ]
       db
       :my/field
       >
       10))

如果我删除了op并在where子句中的>中显式编码,它将起作用。我可以不使用输入参数来引用核心Clojure函数吗?规则会有所帮助吗?还是我需要在运行时使用quoting / unquotinq建立整个查询?

谢谢。

1 个答案:

答案 0 :(得分:2)

尝试一下:

(defn invoke [f & args] (apply f args))

(d/q '[:find [?e ...]
       :in $ ?field ?op ?value
       :where 
       [?e ?field ?x]
       [(myapp.utils.datomic/invoke ?op ?x ?value)]]
  db :my/field > 10)