Datomic 查询和规则文档的“嵌入式”部分说:
像 SQL 这样的查询语言是面向客户端-服务器模型的,在这种模型中,在一次对话中,您将不得不同时处理这两个问题:
- 回答您的基本问题,例如本月谁买了袜子。
- 恢复报告和处理所需的任何其他信息,例如他们的姓名和电子邮件地址。
后者并不是真正的查询,它只是对相关信息的机械导航。
虽然我很欣赏提到的两个不同方面的正交性是如何得到尊重的,但我认为我经常需要检索整个实体,无论它的属性是什么。
据我所知,查询通常具有以下形式:
(datomic.api/q '[:find ?name ?age ?email
:where
[?e :myapp/name ?name]
[?e :myapp/age ?age]
[?e :myapp/email ?email]]
(db conn))
如果我想检索具有 N 个属性的实体,我会让它们在每个查询中都列出它们,这对我来说似乎很乏味且容易出错。
如何告诉 Datomic 检索具有它们持久化的所有字段的实体,而不必显式指定它们?