标题类型说明了一切,但是说我有一个简单的查询如下:
(q '[:find ?c ?n :where [?c :my-thing/its-attribute ?n]]
(d/db conn))
Run Code Online (Sandbox Code Playgroud)
反对像这样的架构
[{:db/id (d/tempid :db.part/db)
:db/ident :my-thing/its-attribute
:db/valueType :db.type/string
:db/doc "My thing's attribute"
:db/cardinality :db.cardinality/one
:db.install/_attribute :db.part/db}]
Run Code Online (Sandbox Code Playgroud)
如果查询匹配所有内容(例如,100M条目),则返回的结果将很大.如果我只想要其中一些,那么最好的方法是什么?
两个随机名称使用rand(重复容忍)和样本(仅限不同)
(d/q '[:find [(rand 2 ?name) (sample 2 ?name)]
:where [_ :artist/name ?name]]
db)
Run Code Online (Sandbox Code Playgroud)
这个例子来自datomic的 github repo.
你尝试过使用get-some吗?
来自: http: //docs.datomic.com/query.html
来一些
get-some 函数采用数据库、实体和一个或多个基数一属性,返回实体 ID 和实体拥有的第一个属性的值的元组。
[(get-some $ ?person :person/customer-id :person/email) ?identifier]
Run Code Online (Sandbox Code Playgroud)
-- 编辑以回复评论 --
您还可以尝试进行查询以选择低于特定数量的实体。
user> (defn example-take-query [n]
(into '[:find ?e :where [?e :age ?a]]
[[`(~'> ~n ~'?e)]]))
#'user/example-take-query
user> (example-take-query 3)
[:find ?e :where [?e :age ?a] [(> 3 ?e)]]
user> (example-take-query 10)
[:find ?e :where [?e :age ?a] [(> 10 ?e)]]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1629 次 |
| 最近记录: |