3

我的问题是 - 有没有办法在 Dataomic 中连接两个在模式中没有引用的实体,而无需编写两个嵌套迭代器(手动连接)。

Datomic Doco 中,他们给出了一个指定两个参数的查询示例

[:find ?n ?u
 :where
 [?c :community/name ?n]
 [?c :community/url ?u]]

他们称之为“连接”——因为底层结构是一个键值数据库——所以即使是同一实体的属性也需要“连接”在一起。

然后,他们给出了两个具有引用的实体之间的连接示例(假设引用在此处未显示的架构中定义):

[:find ?c_name
 :where
 [?c :community/name ?c_name]
 [?c :community/neighborhood ?n]
 [?n :neighborhood/district ?d]
 [?d :district/region :region/ne]]

我的问题是 - 如果没有架构中的引用,是否可以进行上述查询?还是我必须求助于编写迭代器并搜索结果?

4

1 回答 1

2

在 :where 子句中多次出现的任何变量都会被隐式连接。

因此,您可以询问属于社区和社区的名称

(def results (q '[:find ?name :where [_ :neighborhood/name ?name] 
                                     [_ :district/name ?name]] 
                 (db conn)))

这是你要求的吗?(在这个例子中,id 被忽略了)

于 2013-01-31T15:23:24.037 回答