Mongoid + RubyMoney
Mongoid + RubyMoney
我在 Mongoid 中使用 RubyMoney (money-rails) https://github.com/RubyMoney/money-rails。像这样:
class Order
include Mongoid::Document
field :order_amount, :type => Money, :default => Money.new(0)
...
end
如何在 Money
字段上进行聚合?例如,当我 运行 Order.sum(:order_amount)
时,即使该字段的值类似于 #<Money fractional:5500 currency:USD>
,我也会得到 0
。我也试过 Order.sum(:order_amount_cents)
和 returns 0
.
这是生成的RubyMongoDB命令:
command={:aggregate=>"orders", :pipeline=>[{"$match"=>{"order_amount"=>{"$nin"=>[nil]}}}, {"$group"=>{"_id"=>"order_amount", "count"=>{"$sum"=>1}, "max"=>{"$max"=>"$order_amount"}, "min"=>{"$min"=>"$order_amount"}, "sum"=>{"$sum"=>"$order_amount"}, "avg"=>{"$avg"=>"$order_amount"}}}]} (2.4292ms)
我也尝试过将 moped
聚合命令与 Order.collection.aggregate
一起使用,但似乎也不起作用。
Order.collection.aggregate(
{
'$group' => {
'_id' => '$order_amount',
'totalOrder' => { '$sum' => '$order_amount' }
}
}
)
有什么帮助吗?
我刚刚添加了这个 here 的答案,但以防万一其他人像我一样来到这个 post,我能够使用一些东西来总结金钱 - rails 值像这样:
Order.sum("order_amount.cents")
这将 return 只是 Money-rails 结构中的美分值:
{ cents: < value >, currency_iso: < value > }
因此,为了获得金额 -rails 格式,您将使用:
Money.new(Order.sum("order_amount.cents"))
请注意,这是在使用 mongoid v3 时,因为 money-rails 是如何序列化的。
我相信对于以前版本的 mongoid,money-rails 对象是使用 "fractional" 而不是美分序列化的,所以你必须使用:
Money.new(Order.sum("order_amount.fractional"))
希望对您有所帮助!
我在 Mongoid 中使用 RubyMoney (money-rails) https://github.com/RubyMoney/money-rails。像这样:
class Order
include Mongoid::Document
field :order_amount, :type => Money, :default => Money.new(0)
...
end
如何在 Money
字段上进行聚合?例如,当我 运行 Order.sum(:order_amount)
时,即使该字段的值类似于 #<Money fractional:5500 currency:USD>
,我也会得到 0
。我也试过 Order.sum(:order_amount_cents)
和 returns 0
.
这是生成的RubyMongoDB命令:
command={:aggregate=>"orders", :pipeline=>[{"$match"=>{"order_amount"=>{"$nin"=>[nil]}}}, {"$group"=>{"_id"=>"order_amount", "count"=>{"$sum"=>1}, "max"=>{"$max"=>"$order_amount"}, "min"=>{"$min"=>"$order_amount"}, "sum"=>{"$sum"=>"$order_amount"}, "avg"=>{"$avg"=>"$order_amount"}}}]} (2.4292ms)
我也尝试过将 moped
聚合命令与 Order.collection.aggregate
一起使用,但似乎也不起作用。
Order.collection.aggregate(
{
'$group' => {
'_id' => '$order_amount',
'totalOrder' => { '$sum' => '$order_amount' }
}
}
)
有什么帮助吗?
我刚刚添加了这个 here 的答案,但以防万一其他人像我一样来到这个 post,我能够使用一些东西来总结金钱 - rails 值像这样:
Order.sum("order_amount.cents")
这将 return 只是 Money-rails 结构中的美分值:
{ cents: < value >, currency_iso: < value > }
因此,为了获得金额 -rails 格式,您将使用:
Money.new(Order.sum("order_amount.cents"))
请注意,这是在使用 mongoid v3 时,因为 money-rails 是如何序列化的。 我相信对于以前版本的 mongoid,money-rails 对象是使用 "fractional" 而不是美分序列化的,所以你必须使用:
Money.new(Order.sum("order_amount.fractional"))
希望对您有所帮助!