5

我应该如何通过 MongoID使用Money ?我应该将其配置为 BigDecimal 吗?在轨道级别?对于 ActiveRecord,我们有一个叫做 Money 的东西,但 AFAIK 它只支持 AR

4

4 回答 4

8

我也遇到了这个。不幸的是,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 美分之间存储,因此请去掉两位小数,以获得以美元为单位的最小/最大值。

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

于 2012-02-21T00:20:09.717 回答
3

MongoDB 以各种BSON数据类型(int、long int、double)存储数字。我建议您将钱存储为美分(如果是美元)并使用 long int 数据类型。

于 2010-09-28T20:25:18.627 回答
2

如果您喜欢金钱宝石,您可以将其存储为金钱类型。

一个例子: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"
于 2013-02-21T20:00:54.603 回答
0

我建议您尝试使用money-rails 作为替代方案。https://github.com/RubyMoney/money-rails它维护得很好,也可以与 mongoid 一起使用!

于 2012-12-25T11:27:39.990 回答