Skip to content

Instantly share code, notes, and snippets.

@arthurnn
Created March 1, 2013 19:24
Show Gist options
  • Save arthurnn/5067071 to your computer and use it in GitHub Desktop.
Save arthurnn/5067071 to your computer and use it in GitHub Desktop.
class Order
include Mongoid::Document
field :state
field :sent_at, type: Time
field :number, type: Integer
index({ sent_at: 1 })
scope :sent, any_in(state: [:sent]).desc(:sent_at)
end
Loading development environment (Rails 3.2.9)
1.9.3p327 :001 > Order.delete_all
MOPED: 127.0.0.1:27017 COMMAND database=admin command={:ismaster=>1} (1.5669ms)
MOPED: 127.0.0.1:27017 COMMAND database=echo_dev command={:count=>"orders", :query=>{}} (0.4501ms)
MOPED: 127.0.0.1:27017 DELETE database=echo_dev collection=orders selector={} flags=[] (0.1540ms)
=> 3
1.9.3p327 :002 > Order.create!(state: :sent, sent_at: Time.now, number: 100)
MOPED: 127.0.0.1:27017 INSERT database=echo_dev collection=orders documents=[{"_id"=>"5130ffd27c71c15822000001", "state"=>:sent, "sent_at"=>2013-03-01 19:21:54 UTC, "number"=>100}] flags=[] (0.2131ms)
=> #<Order _id: 5130ffd27c71c15822000001, state: :sent, sent_at: 2013-03-01 19:21:54 UTC, number: 100>
1.9.3p327 :003 > Order.create!(state: :sent, sent_at: Time.now, number: 1)
MOPED: 127.0.0.1:27017 INSERT database=echo_dev collection=orders documents=[{"_id"=>"5130ffde7c71c15822000002", "state"=>:sent, "sent_at"=>2013-03-01 19:22:06 UTC, "number"=>1}] flags=[] (0.2470ms)
=> #<Order _id: 5130ffde7c71c15822000002, state: :sent, sent_at: 2013-03-01 19:22:06 UTC, number: 1>
1.9.3p327 :004 > Order.create!(state: :not_sent, sent_at: Time.now, number: 120)
MOPED: 127.0.0.1:27017 INSERT database=echo_dev collection=orders documents=[{"_id"=>"5130ffe47c71c15822000003", "state"=>:not_sent, "sent_at"=>2013-03-01 19:22:12 UTC, "number"=>120}] flags=[] (0.2091ms)
=> #<Order _id: 5130ffe47c71c15822000003, state: :not_sent, sent_at: 2013-03-01 19:22:12 UTC, number: 120>
1.9.3p327 :005 > Order.sent.max(:number)
MOPED: 127.0.0.1:27017 COMMAND database=echo_dev command={:count=>"orders", :query=>{"state"=>{"$in"=>[:sent]}}} (1.0071ms)
MOPED: 127.0.0.1:27017 COMMAND database=echo_dev command={:aggregate=>"orders", :pipeline=>[{"$match"=>{"state"=>{"$in"=>[:sent]}, "number"=>{"$nin"=>[nil]}}}, {"$group"=>{"_id"=>"number", "count"=>{"$sum"=>1}, "max"=>{"$max"=>"$number"}, "min"=>{"$min"=>"$number"}, "sum"=>{"$sum"=>"$number"}, "avg"=>{"$avg"=>"$number"}}}]} (0.7901ms)
=> 100
1.9.3p327 :006 >
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment