如何在数据中从查询中只找到一条记录



我正在使用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]单个元组(列表(
  • :查找?一单个标量(标量值(

最新更新