0

我有一个具有此架构的模型:

class Treatment
  include Mongoid::Document

  field :value, type: Money # money-rails gem
end

该值字段被保存到数据库中value: {"cents"=>313, "currency_iso"=>"EUR"}

我想找到所有治疗方法并按cents价值对其进行排序。

现在这就是我的做法:

Treatment.collection.find().sort({value: { :cents => 1 }})

这是使用轻便摩托车驱动程序。我怎样才能使用普通的 Mongoid 来做到这一点?

编辑1。

  [6] pry(main)> Treatment.all.only(:value).asc('value.cents').entries
  => [#<Treatment _id: 515854c2a1d24ccb1f000005, value: {"cents"=>2849, "currency_iso"=>"EUR"}>,
   #<Treatment _id: 515854c2a1d24ccb1f000006, value: {"cents"=>313, "currency_iso"=>"EUR"}>,
   #<Treatment _id: 515854c2a1d24ccb1f00000f, value: {"cents"=>1214, "currency_iso"=>"EUR"}>,
   #<Treatment _id: 515854c2a1d24ccb1f000010, value: {"cents"=>1795, "currency_iso"=>"EUR"}>,
   #<Treatment _id: 515854c2a1d24ccb1f000011, value: {"cents"=>105, "currency_iso"=>"EUR"}>,
   #<Treatment _id: 515854c2a1d24ccb1f000012, value: {"cents"=>2547, "currency_iso"=>"EUR"}>

编辑2。

mongodb:稳定的 2.4.1-x86_64 mongoid (3.1.2)

4

1 回答 1

1

使用点语法:

Treatment.all.asc('value.cents')

编辑: 完整示例:

require 'mongoid'
Mongoid.load!("mongoid.yml", :development)

class Treatment
  include Mongoid::Document
  field :value, type: Hash
end

Treatment.delete_all

15.times do
  Treatment.create(value: {cents: rand(3000), currency_iso: "EUR" })
end
p Treatment.all.only(:value).asc('value.cents').map{|t| t.value["cents"] }
于 2013-03-31T23:16:58.607 回答