我应该如何使用MongoID使用Money?我应该将其配置为BigDecimal吗?在铁轨水平?对于ActiveRecord,我们有一些名为Money的东西,但AFAIK它只支持AR
答案 0 :(得分:8)
我也碰到了这个。不幸的是,BigDecimal在Mongodb中存储为一个字符串,所以它不会让你像浮点数或int那样对它进行求和,排序等。
整数似乎是将值存储在美分中的方式,可能使用Money gem来抽象它:https://github.com/RubyMoney/money
Mongo在大多数现代机器上使用64位存储int我认为所以即使在美分中也不需要更大的风险。看起来您可以存储-9,223,372,036,854,775,808和9,223,372,036,854,775,807美分,所以取小数点后两位以获得美元的最小值/最大值。
答案 1 :(得分:3)
MongoDB以各种BSON数据类型(int,long int,double)存储数字。我建议您将钱存储为美分(如果是美国货币)并使用long int数据类型。
答案 2 :(得分:2)
如果您喜欢money gem,可以将其存储为Money类型。
示例: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"
答案 3 :(得分:0)
我建议您尝试使用money-rails作为替代方案。 https://github.com/RubyMoney/money-rails维护得非常好,也可以与mongoid一起使用!