试图插入使用蒙格随着浮法/大小数文档来蒙戈在它蒙格为java.math.BigDecimal的
(MC /插入DB“产品” {缺少编解码器:价格300.00M})
,并得到下面的错误。
错误compojure.api.exception - 找不到类java.math.BigDecimal的编解码器。当我删除价格
插入正常工作。 我是否缺少任何编解码器依赖或我做错了什么?谷歌搜索没有多大帮助。提前致谢。
试图插入使用蒙格随着浮法/大小数文档来蒙戈在它蒙格为java.math.BigDecimal的
(MC /插入DB“产品” {缺少编解码器:价格300.00M})
,并得到下面的错误。
错误compojure.api.exception - 找不到类java.math.BigDecimal的编解码器。当我删除价格
插入正常工作。 我是否缺少任何编解码器依赖或我做错了什么?谷歌搜索没有多大帮助。提前致谢。
的MongoDB不支持Java的BigDecimal的序列化/反序列化。 我最终做的是使用字符串值创建我自己的序列化/反序列化。
所以价值10123M
将被存储在MongoDB的字符串bigdec:10123
。
所以刚才创建的Clojure文件myproject.data.big-decimal
和你的项目需要一次地方:
(ns myproject.data.big-decimal
(:require [monger.conversion :refer :all]
[clojure.string :as str]))
(def prefix "bigdec:")
(def prefix-count (count prefix))
(defn big-dec-serialize [value]
(str prefix value))
(defn big-dec-deserialize [s]
(if (and (> (count s) prefix-count)
(= (subs s 0 prefix-count) prefix))
(try
(bigdec (subs s prefix-count (count s)))
(catch Exception e
s))
s))
(extend-protocol ConvertToDBObject
java.math.BigDecimal
(to-db-object [^java.math.BigDecimal nr]
(big-dec-serialize nr)))
(extend-protocol ConvertFromDBObject
String
(from-db-object [^String input keywordize]
(big-dec-deserialize input)))
只要你保持你的应用程序中,这些序列化,事情很快就会好的。如果你需要其他应用程序来访问你的数据库,那么他们将不得不具有相同的de /序列化功能,这样可能会变得更加棘手。
也有是从您的数据库读取每个字符串的额外开销,它可能会影响你的表现,如果你有非常高分贝的用法,但我认为这是在正常情况下可以忽略不计。
如果您需要帮助,您确实需要发布示例代码(最小案例!)以及错误消息。 –
有同样的问题 - 它似乎没有简单的解决办法,据我了解,读作[此线程(https://groups.google.com/forum/#!msg/clojure-mongodb/alg9b2mfESA/OuztuCGu5bkJ)为细节... –
@AlanThompson编辑的问题。谢谢。 –