我正在使用datomic.api对datomic进行查询,如下所示:
(d/q
'[:find [(pull ?a [*]) ...]
:in $ ?title
:where
[?a :movie/title ?title]]
db title)
这个查询返回的几乎是预期的值,但作为一个数组,如下所示:
[ {:db/id 17592186045442, :movie/title "Test", :movie/year 1984, :movie/director #:db{:id 17592186045439 }} ]
我希望这个查询只返回第一个匹配,而不是所有结果。我做错了什么?
我为我的特定案例找到了解决方案。真正的问题是我没有正确理解数据查询。
[:find [(pull ?a [*]) ...]
这部分告诉datomic要检索多个结果。我将查询更改为以下查询:
(d/q
'[:find (pull ?a [*]) .
:in $ ?title
:where
[?a :movie/title ?title]]
db title)
它成功了!关键是删除";["之后:查找关键字,并将"…"切换为仅".">
如果这对你不起作用,看看@EugenePakhomov在评论上发布的链接:等价于SQL;极限;Datomic 中的子句
它记录在官方Datomic文档中:
查找规范
- :找到?一b关系(列表集合(
- :查找[?a…]集合(集合(
- :find[?a?b]单个元组(列表(
- :查找?一单个标量(标量值(