Деньги представления в Монгоиде
-
26-09-2019 - |
Вопрос
Как я должен работать с Деньги с монгоидом? Должен ли я настроить его как BigDecimal? А на уровне рельсов? Для Acciverecord у нас есть что называемые деньги, но AFAIK это просто поддерживает AR
Решение
Mongodb Магазины номеров в разных Босоз Типы данных (INT, длинные INT, Double). Я рекомендую вам хранить деньги в целях (если нам валюта) и используйте длинный int datatype.
Другие советы
Я также столкнулся с этим. К сожалению, большие магазины в Mongodb как строка, поэтому она не позволит вам суммировать, сортировать и т. Д. На нем, как поплавок или INT.
Целое число, кажется, способ пойти в хранение стоимости в центах, возможно, использование драгоценного камня денег немного аннотация: https://github.com/rubymoney/money
Mongo сохраняет int используя 64 бита на большинстве современных машин, которые я думаю, что не так много риска необходимости большего количества даже в центах. Похоже, вы можете хранить между -9 223,372 036,854 775 808 и 9,223 372 036 854 775 807 центов, поэтому снимайте два десятичных места, чтобы получить значение вашего MIN / MAX в долларах.
Если вам нравятся деньги GEM, вы можете хранить его как тип денег.
Пример: https://gist.github.com/michaelkoper/5007636.
Он хранит деньги как массив [центов, валюта
class Product
include Mongoid::Document
field :price, type: Money
end
product = Product.new(:price => Money.new(1000, 'EUR'))
product.price.format
# => "€10.00"
Я рекомендую вам попробовать деньги в качестве альтернативы. https://github.com/rubymoney/money-rails. Это довольно хорошо поддерживается и работает с монгоидом!