Added sort() method to Cursor Class, with tests and docs.
This commit is contained in:
parent
3321a90739
commit
bdafae6eeb
|
@ -73,6 +73,18 @@ module Mongo
|
|||
raise OperationFailure, "Count failed: #{response['errmsg']}"
|
||||
end
|
||||
|
||||
# Sort the results of the query with a hash of keys and orders
|
||||
#
|
||||
# Sorts should be formed as such:
|
||||
# {:name=>-1} (sort by name, descending) OR {:name=>1} (sort by name, ascending)
|
||||
# options are stackable, with the last option being the priority, i.e.:
|
||||
# {:name => -1, :age => 1} (name descending, age asending)
|
||||
def sort(order_hash = {})
|
||||
raise InvalidOperation, "can't call Cursor#sort on a used cursor" if @query_run
|
||||
@query.order_by = order_hash
|
||||
self
|
||||
end
|
||||
|
||||
# Limits the number of results to be returned by this cursor.
|
||||
#
|
||||
# Note: this method overrides any limit specified in the #find method.
|
||||
|
|
|
@ -58,6 +58,23 @@ class CursorTest < Test::Unit::TestCase
|
|||
assert_equal 0, @@db['acollectionthatdoesn'].count()
|
||||
end
|
||||
|
||||
def test_sort
|
||||
@@coll.clear
|
||||
5.times{|x| @@coll.insert({"a" => x, "b" => 5-x}) }
|
||||
|
||||
assert_kind_of Cursor, @@coll.find().sort({:a=>1})
|
||||
|
||||
assert_equal 0, @@coll.find().sort({:a => 1}).next_object["a"]
|
||||
assert_equal 4, @@coll.find().sort({:a => -1}).next_object["a"]
|
||||
|
||||
assert_equal 1, @@coll.find().sort({:a => 1, :b => 1}).next_object["b"]
|
||||
assert_equal 5, @@coll.find().sort({:a => 1, :b => -1}).next_object["b"]
|
||||
|
||||
assert_equal 4, @@coll.find().sort({:a => 1}).sort({:a => -1}).next_object["a"]
|
||||
assert_equal 4, @@coll.find().sort({:a => 1}).sort({:a => -1}).next_object["a"]
|
||||
|
||||
end
|
||||
|
||||
def test_limit
|
||||
@@coll.clear
|
||||
|
||||
|
|
Loading…
Reference in New Issue