В разделе «Встроенные» документа Datomic Queries and Rules говорится:
Языки запросов, такие как 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 извлекать объекты со всеми полями, с которыми они были сохранены, без необходимости указывать их явно?