我有一个由问题组成的域模型,每个问题都与许多评论和确认相关联。
我想做一个Datalog 查询,它为每个问题提取一堆内容属性,以及相关的评论和确认的数量,包括这些关系何时为空(例如,某些问题没有评论或没有确认),其中如果返回的计数应为 0。
我已经看到了以下要点,它显示了如何使用“权重”变量(sum ...)
并将(or-join)
其与“权重”变量结合以在关系为空时获得零计数。
但是,当有 2 个关系时,我看不到如何使这项工作。我尝试了以下方法,但返回的计数不正确:
(def query '[:find (sum ?comment-weight) (sum ?affirmation-weight) ?text ?time ?source-identifier ?q
:with ?uniqueness
:where
[?q :question/text ?text]
[?q :question/time ?time]
[?q :question/source-identifier ?source-identifier]
(or-join [?q ?uniqueness ?comment-weight ?affirmation-weight]
(and [?comment :comment/question ?q]
[?affirmation :affirmation/question ?q]
['((identity ?comment) (identity ?affirmation)) ?uniqueness]
[(ground 1) ?comment-weight]
[(ground 1) ?affirmation-weight])
(and [?comment :comment/question ?q]
[(identity ?comment) ?uniqueness]
[(ground 1) ?comment-weight]
[(ground 0) ?affirmation-weight])
(and [?affirmation :affirmation/question ?q]
[(identity ?affirmation) ?uniqueness]
[(ground 1) ?affirmation-weight]
[(ground 0) ?comment-weight])
(and [(identity ?q) ?uniqueness]
[(ground 0) ?comment-weight]
[(ground 0) ?affirmation-weight]))])
最初是在 Clojurians Slack 上问的。