测试 clojure PersistentArrayMap 和数据 EntityMap 之间的相等性?

Test for equality between a clojure PersistentArrayMap and a datomic EntityMap?

我正在为我的数据代码编写一些测试。我创建一个事务映射:

(def tx-map
  {:db/id #db/id[:db.part/user -1000235]
   :some-ns/my-attr {:db/id 17592186045421}}

交易正常。我查询我新添加的实体:

 (def ent
   "Query result."
   {:db/id 17592186045425})

测试一下是否一切正常:

(= (:some-ns/my-attr tx-map) ; {:db/id 17592186045421}
   (:some-ns/my-attr ent))   ; {:db/id 17592186045421}

=> false ; All is not well

原因是?

(type (:some-ns/my-attr tx-map)) => clojure.lang.PersistentArrayMap
(type (:some-ns/my-attr ent))    => datomic.query.EntityMap

如何正确测试 clojure PersistentArrayMap 和数据 EntityMap 之间的相等性?

Datomic EntityMap 目前不支持关联和其他 Clojure 映射接口功能,但正在考虑此功能。

要将实体转换为 Clojure 映射,只需使用 (into)。

(进入 {} 个实体)

参考:https://groups.google.com/d/msg/datomic/IzRSK9e7VJo/YGejFLl3vxYJ

但这不是这里的问题,因为这给出了如果我们实现整个地图将返回的全部属性。

实体是惰性地图,因此无法与地图进行比较。 http://docs.datomic.com/entities.html

但是它们是关联的,我们可以获得每个属性的值。所以你可以比较 ids :

(== (:db/id (:some-ns/my-attr tx-map)) ; 17592186045421
    (:db/id ent))                      ; 17592186045421

注意 ==,我们比较两个数字...;)

因此只会选择 :db/id。也许 ent 函数应该给你 id

(def ent
  ":db/id of query result."
  17592186045425)

测试变为:

(== (:db/id (:some-ns/my-attr tx-map)) ; 17592186045421
    ent)                               ; 17592186045421

很抱歉回答晚了,我很忙。

警告,这只是根据文档,我现在没有可运行的安装 datomic 版本...