представление денег в монгоиде - PullRequest
5 голосов
/ 28 сентября 2010

Как мне работать с Деньгами с MongoID? Должен ли я настроить его как BigDecimal? А на уровне рельсов? Для ActiveRecord у нас есть что-то под названием Money, но AFAIK просто поддерживает AR

Ответы [ 4 ]

8 голосов
/ 21 февраля 2012

Я столкнулся с этим также.К сожалению, BigDecimal хранит в Mongodb как строку, поэтому он не позволит вам суммировать, сортировать и т. Д. В нем как float или int.

Кажется, что целое число - это способ хранения значения в центах, возможноиспользуя гем Money, чтобы немного его абстрагировать: https://github.com/RubyMoney/money

Mongo хранит int, используя 64 бита на большинстве современных машин, я думаю, поэтому нет большого риска необходимости большего количества даже в центах.Похоже, вы можете хранить от −9,223,372,036,854,775,808 до 9,223,372,036,854,775,807 центов, поэтому снимите два десятичных знака, чтобы получить минимальное / максимальное значение в долларах.

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

3 голосов
/ 29 сентября 2010

MongoDB хранит числа в различных типах данных BSON (int, long int, double). Я рекомендую хранить деньги в виде центов (если валюта США) и использовать тип данных long int.

2 голосов
/ 22 февраля 2013

Если вам нравится денежный драгоценный камень, вы можете сохранить его как тип денег.

Пример: 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"
0 голосов
/ 25 декабря 2012

Я рекомендую вам попробовать денежные рельсы в качестве альтернативы.https://github.com/RubyMoney/money-rails Он довольно ухоженный и работает с монгоидом!

...