Clojure 不使用通配符拉取的原因?
有什么理由不使用通配符拉取吗Clojure 不使用通配符拉取的原因?,clojure,datomic,Clojure,Datomic,有什么理由不使用通配符拉取吗 (defn pull-wild "Pulls all attributes of a single entity." [db ent-id] (d/pull db '[*] ent-id)) 它比显式地声明属性方便得多 这取决于您的应用程序中需要具有哪些属性,以及它是否是数据密集型的,或者您是否希望提取大量实体 在使用客户机库的情况下,您可能希望最小化需要通过线路发送的数据 我想还有很多其他的想法 但只要它足够快,我就会拉通配符 fricke您可能还对
(defn pull-wild
"Pulls all attributes of a single entity."
[db ent-id]
(d/pull db '[*] ent-id))
它比显式地声明属性方便得多 这取决于您的应用程序中需要具有哪些属性,以及它是否是数据密集型的,或者您是否希望提取大量实体 在使用客户机库的情况下,您可能希望最小化需要通过线路发送的数据 我想还有很多其他的想法 但只要它足够快,我就会拉通配符
fricke您可能还对
实体映射
功能感兴趣。给定EID(或查找引用),它将以常规Clojure映射的形式返回完整记录:
(let [
; Retrieve James' attr-val pairs as a map. An entity can be referenced either by EID or by a
; LookupRef, which is a unique attribute-value pair expressed as a vector.
james-map (td/entity-map (live-db) james-eid) ; lookup by EID
james-map2 (td/entity-map (live-db) [:person/name "James Bond"] ) ; lookup by LookupRef
]
(is (= james-map james-map2
{:person/name "James Bond" :location "London" :weapon/type #{:weapon/wit :weapon/gun} } ))
依我看,你会得到全部的。这可能是一个很大的工作:当你想要的只是客户的时候,一个大订单中所有那些无用的订单行。