0

在数据脚本1.3.0上测试

数据:

[{:db/id -1 :name "Oliver Smith" :hobbies ["reading" "sports" "music"]}] 

尝试运行下面的查询以查找喜欢运动的人,但返回了空集。

'[:find ?name
  :where
  [?p :name ?name]
  [?p :hobbies ?hobbies]
  [(some #{"sports"} ?hobbies)]] 

如何正确制定查询以获得以下预期结果?

#{[Oliver Smith]}
4

1 回答 1

2

我们必须cardinality/many针对多个值的属性显式定义模式来解决问题,因为无模式在这里不起作用。

(require '[datascript.core :as d])

(def schema {:hobbies {:db/cardinality db.cardinality/many}})
(def conn (d/create-conn schema))

(def datoms [{:db/id -1 :name "Oliver Smith" :hobbies ["reading" "sports" "music"]}])
(d/transact! conn datoms)

(def query '[:find ?name :where [?p :name ?name] [?p :hobbies "sports"]])
(-> (d/q query @conn) println)
于 2021-11-30T07:23:54.107 回答