Representação de dinheiro em mongóides
-
26-09-2019 - |
Pergunta
Como devo trabalhar com Dinheiro com mongóides? Devo configurá -lo como BigDecimal? E no nível dos trilhos? Para o ActiveRecord, temos algo chamado dinheiro, mas Afaik ele apenas suporta AR
Solução
MongoDB armazena números em vários BSON Tipos de dados (int, long int, duplo). Eu recomendo você armazenar dinheiro como centavos (se a moeda dos EUA) e usar o tipo de dados long Int.
Outras dicas
Eu também encontrei isso. Infelizmente, as lojas BigDecimal em MongoDB como uma corda, para que não deixe você resumir, classificar, etc. como um flutuador ou int.
O número inteiro parece ser o caminho a seguir armazenando o valor em centavos, possivelmente usando a jóia do dinheiro para abstrair um pouco: https://github.com/rubymoney/money
O Mongo armazena o INT usando 64 bits na maioria das máquinas modernas, acho que não há muito risco de precisar de uma quantidade maior, mesmo em centavos. Parece que você pode armazenar entre -9.223.372.036.854.775.808 e 9.223.372.036.854.775.807 centavos, então tire dois lugares decimais para obter seu valor min/máximo em dólares.
Se você gosta da jóia do dinheiro, pode armazená -la como tipo de dinheiro.
Um exemplo: https://gist.github.com/michaelkoper/5007636
Ele armazena o dinheiro como uma matriz [centavos, moeda
class Product
include Mongoid::Document
field :price, type: Money
end
product = Product.new(:price => Money.new(1000, 'EUR'))
product.price.format
# => "€10.00"
Eu recomendo que você tente os trilhos de dinheiro como alternativa. https://github.com/rubymoney/money-rails É muito bem conservado e trabalha com mongóides também!