如何编写一个考虑整个集合的数据组查询

zca*_*ate 7 clojure datomic

是否可以在datomic中编写这些类型的查询?

  • 找到最老的孩子的名字
  • 找到体重指数最低的人(体重/身高)

Grz*_*ywo 8

[:find (max ?tuple) :where 
    [?k :kid/age ?age] 
    [?k :kid/name ?name] 
    [(vector ?age ?name) ?tuple]
Run Code Online (Sandbox Code Playgroud)

注意:

  • 表达式中属性的顺序很(vector ?age ?name)重要

  • 查询返回单个结果,而我们可能期望一个集合,因为可能有许多年龄的孩子是集合中的最大值.你可以(max n ?tuple)用来实现这一目标.

另请参阅http://docs.datomic.com/query.html中的Aggregates Returning Collections部分

如果您有更具体的内容,请在问题中提供更多详细信息并包含您的架构.