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} } ))
依我看,你会得到全部的。这可能是一个很大的工作:当你想要的只是客户的时候,一个大订单中所有那些无用的订单行。