如何查询多个值的属性?
How to query against attributes of multiple values?
在 datascript 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]}
我们必须针对多值属性明确定义带有 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)
在 datascript 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]}
我们必须针对多值属性明确定义带有 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)