我应该如何通过 MongoID使用Money ?我应该将其配置为 BigDecimal 吗?在轨道级别?对于 ActiveRecord,我们有一个叫做 Money 的东西,但 AFAIK 它只支持 AR
4 回答
我也遇到了这个。不幸的是,BigDecimal 以字符串形式存储在 Mongodb 中,因此它不会像浮点数或整数那样让您对其进行求和、排序等。
整数似乎是以美分存储价值的方式,可能使用 Money gem 来抽象一点:https ://github.com/RubyMoney/money
Mongo 在我认为的大多数现代机器上使用 64 位存储 int,因此即使是美分,也没有太大的风险需要更大的数量。看起来您可以在 -9,223,372,036,854,775,808 和 9,223,372,036,854,775,807 美分之间存储,因此请去掉两位小数,以获得以美元为单位的最小/最大值。
MongoDB 以各种BSON数据类型(int、long int、double)存储数字。我建议您将钱存储为美分(如果是美元)并使用 long int 数据类型。
如果您喜欢金钱宝石,您可以将其存储为金钱类型。
一个例子:https ://gist.github.com/michaelkoper/5007636
它将钱存储为数组 [cents, currency]
class Product
include Mongoid::Document
field :price, type: Money
end
product = Product.new(:price => Money.new(1000, 'EUR'))
product.price.format
# => "€10.00"
我建议您尝试使用money-rails 作为替代方案。https://github.com/RubyMoney/money-rails它维护得很好,也可以与 mongoid 一起使用!