不使用的原因使用通配符拉?

时间:2017-03-29 14:06:53

标签: clojure datomic

有没有理由不使用通配符拉?

(defn pull-wild
  "Pulls all attributes of a single entity."
  [db ent-id]
  (d/pull db '[*] ent-id))

比明确说明属性要方便得多。

2 个答案:

答案 0 :(得分:1)

这取决于您需要在应用程序中使用哪些属性,以及它是否需要大量数据,或者您是否要提取大量实体。

如果您使用客户端库,您可能希望最小化需要通过网络发送的数据。

我想还有很多其他的想法。

但只要它足够快我就会拉出通配符。

fricke

答案 1 :(得分:0)

您可能还对entity-map函数from Tupelo Datomic感兴趣。给定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} } ))