add Cursor#count method
This commit is contained in:
parent
256e64c4a3
commit
103224b800
|
@ -71,6 +71,20 @@ module XGen
|
|||
o
|
||||
end
|
||||
|
||||
# Get the size of the results set for this query.
|
||||
#
|
||||
# Returns the number of objects in the results set for this query. Does
|
||||
# not take limit and skip into account. Raises OperationFailure on a
|
||||
# database error.
|
||||
def count
|
||||
command = OrderedHash["count", @collection.name,
|
||||
"query", @query.selector]
|
||||
response = @db.db_command(command)
|
||||
return response['n'].to_i if response['ok'] == 1
|
||||
return 0 if response['errmsg'] == "ns missing"
|
||||
raise OperationFailure, "Count failed: #{response['errmsg']}"
|
||||
end
|
||||
|
||||
# Iterate over each object, yielding it to the given block. At most
|
||||
# @num_to_return records are returned (or all of them, if
|
||||
# @num_to_return is 0).
|
||||
|
|
|
@ -31,6 +31,33 @@ class CursorTest < Test::Unit::TestCase
|
|||
assert_kind_of Numeric, explaination['nscanned']
|
||||
end
|
||||
|
||||
def test_count
|
||||
@@coll.clear
|
||||
|
||||
assert_equal 0, @@coll.find().count()
|
||||
|
||||
10.times do |i|
|
||||
@@coll.save("x" => i)
|
||||
end
|
||||
|
||||
assert_equal 10, @@coll.find().count()
|
||||
assert_kind_of Integer, @@coll.find().count()
|
||||
assert_equal 10, @@coll.find({}, :limit => 5).count()
|
||||
assert_equal 10, @@coll.find({}, :offset => 5).count()
|
||||
|
||||
assert_equal 1, @@coll.find({"x" => 1}).count()
|
||||
assert_equal 5, @@coll.find({"x" => {"$lt" => 5}}).count()
|
||||
|
||||
a = @@coll.find()
|
||||
b = a.count()
|
||||
a.each do |doc|
|
||||
break
|
||||
end
|
||||
assert_equal b, a.count()
|
||||
|
||||
assert_equal 0, @@db['acollectionthatdoesn'].count()
|
||||
end
|
||||
|
||||
def test_close_no_query_sent
|
||||
begin
|
||||
cursor = @@coll.find('a' => 1)
|
||||
|
|
Loading…
Reference in New Issue