Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

273
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda