clojure - 我可以将实体及其父组件一直拉到组件树中吗?

标签 clojure datomic datalog

是否可以将一个实体和所有组件父级一直拉到树上?

反向递归拉动。

如果没有,我该怎么做?

最佳答案

数据拉动表达式确实支持反向属性导航。假设您的架构如下:

(d/transact conn [{:db/id                 (d/tempid :db.part/db)
                   :db/ident              :node/children
                   :db/valueType          :db.type/ref
                   :db/cardinality        :db.cardinality/many
                   :db.install/_attribute :db.part/db}])

创建树:

(defn node [name & children]
  (cond-> {:db/id  (d/tempid :db.part/user)
           :db/doc name}
    children (assoc :node/children children)))

(d/transact conn [(node "L1"
                        (node "L1.1"
                              (node "L1.1.1")
                              (node "L1.1.2"))
                        (node "L1.2"
                              (node "L1.2.1")))])

使用查询递归地拉取组件父级(注意“_children”):

(d/q '[:find (pull ?e [:db/doc {:node/_children ...}]) .
       :where [?e :db/doc "L1.2.1"]]
     (d/db conn)) 

=> {:db/doc "L1.2.1", :node/_children [{:db/doc "L1.2", :node/_children [{:db/doc "L1"}]}]}

关于clojure - 我可以将实体及其父组件一直拉到组件树中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40909020/

相关文章:

clojure - 可以通过 Datomic pull 语法获取枚举值吗?

clojure - 如何正确缩进 clojure/lisp?

clojure - core.async和10,000个动画处理-在这种情况下,实际的好处是什么?

clojure - 查找 ref-to-many 属性包含所有输入元素的实体

search - Datomic - 选择某些属性最高的实体

c# - 使用计时器逐行读取文本文件

datomic - 如何在数据日志查询中对结果进行排序

vector - 根据键将向量拆分为向量的向量

json - 如何在文件中写入一些transit-clj以及如何从该文件中检索数据结构

scala - 验证 Datomic 实体 ID 是否有效