Geld Darstellung in mongoid
-
26-09-2019 - |
Frage
Wie soll ich arbeiten mit Geld mit MongoID? Soll ich so konfiguriert, dass als BigDecimal? Und auf Schienen Ebene? Für Active haben wir etwas namens Geld, aber AFAIK es unterstützt nur AR
Lösung
MongoDB speichert Zahlen in verschiedenen BSON Datentypen (int, long int, double). Ich empfehle Ihnen, speichern Geld als Cent (wenn US-Währung) und die long int-Datentyp verwenden.
Andere Tipps
Ich lief auch in diesen. Leider BigDecimal Filialen in MongoDB als String, so dass es nicht Sie lassen summieren, sortieren, usw. auf sie wie ein Schwimmer oder int.
Integer scheint der Weg zu sein, den Wert in Cent gehen speichern, möglicherweise das Geld Juwel mit abstrahieren es ein wenig: https://github.com/RubyMoney/money
Mongo speichert die int mit 64 Bits auf modernsten Maschinen denke ich, so gibt es nicht viel Risiko für eine größere Menge auch in Cent benötigen. Es sieht aus wie Sie zwischen -9.223.372.036.854.775.808 und 9.223.372.036.854.775.807 Cent speichern können, also zwei Dezimalstellen ausziehen zu Ihrem min / max-Wert in Dollar.
Wenn Sie das Geld Juwel Sie es als Geldtyp speichern kann.
Ein Beispiel: https://gist.github.com/michaelkoper/5007636
Es speichert das Geld als Array [cents, Währung]
class Product
include Mongoid::Document
field :price, type: Money
end
product = Product.new(:price => Money.new(1000, 'EUR'))
product.price.format
# => "€10.00"
Ich empfehle Ihnen, Geld-Schienen als Alternative zu versuchen. https://github.com/RubyMoney/money-rails Es ist ziemlich gut gepflegt und arbeitet mit mongoid auch!