mongoid中的货币表示

时间:2010-09-28 15:31:34

标签: ruby-on-rails mongodb mongoid

我应该如何使用MongoID使用Money?我应该将其配置为BigDecimal吗?在铁轨水平?对于ActiveRecord,我们有一些名为Money的东西,但AFAIK它只支持AR

4 个答案:

答案 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美分,所以取小数点后两位以获得美元的最小值/最大值。

http://en.wikipedia.org/wiki/Integer_(computer_science)

答案 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一起使用!