Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

263
Views
Monger Códec faltante para java.math.Bigdecimal

Intentando insertar un documento en Mongo usando Monger con un decimal flotante/grande en él

(mc/insert db "productos" {:nombre "Camisa" :Precio 300.00M })

y obtiene el siguiente error.

ERROR compojure.api.exception: no se puede encontrar un códec para la clase java.math.BigDecimal.

El inserto funciona bien cuando elimino el precio. ¿Me estoy perdiendo alguna dependencia de códec o qué estoy haciendo mal? La búsqueda en Google no ayudó mucho. Gracias de antemano.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

MongoDB no es compatible con la serialización/deserialización BigDecimal de Java. Lo que terminé haciendo fue crear mi propia serialización/deserialización usando valores de cadena.

Entonces, el valor 10123M se almacenaría como la cadena bigdec:10123 en MongoDB.

Así que simplemente cree el archivo myproject.data.big-decimal y pídale una vez en algún lugar de su proyecto:

 (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 es)) 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)))

Mientras mantenga estas serializaciones dentro de su aplicación, las cosas funcionarán bien. Si necesita otras aplicaciones para acceder a su base de datos, entonces tendrían que tener las mismas funciones de deserialización, por lo que podría ser más complicado.

También hay una sobrecarga adicional para leer cada cadena de su db, podría afectar su rendimiento si tiene un uso muy alto de db, pero creo que es insignificante en casos normales.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!