2014-10-26 32 views
4

由于Datomic模式本身存储在Datomic中,因此如何查询Datomic以获取当前安装的模式?我只想获得用户级架构,不包括像分区一样的系统级架构。如何获取当前的Datomic模式?

+0

我在这里回答了一个非常类似的问题:http://stackoverflow.com/questions/18281499/how-can-i-list-all-user-created-attributes。我认为这就是你想要的。希望能帮助到你。 – a2ndrade 2014-10-26 19:56:56

回答

3

根据Datomic docs,用户级架构应安装到:db.part/db分区。给定一个Datomic连接,以下函数获取该分区中的所有模式属性。

(defn get-user-schema [conn] 
    (d/q '[:find ?id 
     :where [?e :db/ident ?id] 
       [_ :db.install/attribute ?e] 
       [?e :db.install/partition :db.part/db]] 
     (d/db conn))) 

相关:is there a canonical way to grab all idents from a particular datomic partition?

+0

where子句的这部分似乎不工作'''[?e:db.install/partition:db.part/db]''',所以答案只是部分正确,a2ndrade在评论中的回答最初的问题就像一种魅力。 – 2016-02-19 13:34:43

1

我才开始学习Datomic和数据记录相当最近,所以我不知道事情已经在三年间,它一直因为以前的答案只是换了,或者这是

[:find ?attr ?type ?card 
:where 
[_ :db.install/attribute ?a] 
[?a :db/valueType ?t] 
[?a :db/cardinality ?c] 
[?a :db/ident ?attr] 
[?t :db/ident ?type] 
[?c :db/ident ?card]] 

它会给你的东西,看起来像这样:

只是在做同样的事情用不同的方式

取自http://www.learndatalogtoday.org/chapter/4(解决方案挑战2底部)。