datomic - 使用 bigint 属性查询某些值返回空

标签 datomic

我创建了一个具有 bigint 类型的一个属性的最小实体,我的问题是查询某些值失败;这是架构:

  [{:db/ident :home/area,
    :db/valueType :db.type/bigint,
    :db/cardinality :db.cardinality/one,
    :db/doc "the doc",
    :db.install/_attribute :db.part/db,
    :db/id #db/id[:db.part/db -1000013]}]

我插入了一个示例值:

(d/transact (d/connect uri2)
            [{
              :db/id #db/id[:db.part/user]
              :home/area 123456789000000N}
             ])

并确认它是使用 datomic 控制台创建的。碰巧以下查询没有按预期返回先前插入的实体:

(d/q '[
       :find ?e
       :in $ ?h
       :where
       [?e :home/area ?h]]
     (d/db (d/connect uri2))
     123456789000000N
     )
;;--- #{}

也许我在表达值(value)的方式上遗漏了一些东西。对属性 :home/area 使用不同的值(如 100N)的另一个测试返回正确的答案:

(d/transact (d/connect uri2)
            [{
              :db/id #db/id[:db.part/user]
              :home/area 100N}
             ])

(d/q '[
       :find ?e
       :in $ ?h
       :where
       [?e :home/area ?h]]
     (d/db (d/connect uri2))
     100N
     )
;;-- #{[17592186045451]}

对于值 111111111111111111111111111111111111N 也可以正常工作,这让我感到困惑。

Datomic version: "0.9.5390" java version "1.8.0_05" Java(TM) SE Runtime Environment (build 1.8.0_05-b13) Java HotSpot(TM) 64-Bit Server VM (build 25.5-b02, mixed mode) MySQL as Storage service

预先感谢您的任何建议。

最佳答案

对于 Clojure 用户来说,名称 :db.type/bigint 可能会产生误导,因为 it actually mapsjava.math.BigInteger,而不是 clojure.lang。 BigInt.

我重现了相同的步骤,但我无法告诉您为什么数据记录查询在 123456789000000N 上失败,但在 100N1111111111111111111111111111111111111N 上失败。然而,以下方法似乎总是有效:

(d/q '[
       :find ?e
       :in $ ?h
       :where
       [?e :home/area ?h]]
     (d/db (d/connect uri2))
     (.toBigInteger 100N)
     )

关于datomic - 使用 bigint 属性查询某些值返回空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38907972/

相关文章:

windows - Datomic dev-local 可以安装在 Windows 上吗?

clojure - Datomic 中多个属性的全文搜索

clojure - 通过带有 Datomic 和 GPG key 的 SSH 使用 "lein ring server"

database - 如何使用 Datomic 数据库执行原子操作?

clojure - 我应该在 Datomic 上拥有多少个交易者?

clojure - Clojure 和 Datomic 的 Multi-Tenancy

datomic - Datomic 位于 CAP 三角的哪个位置?

clojure - 可以通过 Datomic pull 语法获取枚举值吗?

clojure - 查找 ref-to-many 属性包含所有输入元素的实体