razenha
razenha

Reputation: 7752

Count operation with parameters with mongodb ruby driver

I was trying to use the count() Mongodb feature (db.collection_name.count({data:value}) using the Ruby Driver. I tried using de collection.count method, but it don't accept any parameters.

I checked the collection.count() method docs, it only returns the total amount of objects in the collection, where is no way you can pass a "filter" parameter to this method.

Is it possible use the count() Mongodb feature with filter parameters in some other way?

Upvotes: 1

Views: 2187

Answers (3)

xavdid
xavdid

Reputation: 5262

It's actually possible to use .count() as you do on the command line, it's just poorly documented.

Mongo command line:

db.User.find({"emails.5": {"$exists": true}}).count()

Mongo Ruby driver:

db.collection('User').count({:query => {"emails.5" => {"$exists" => true}}})

This and other .count() options are document here.

Upvotes: 0

Gianfranco P
Gianfranco P

Reputation: 10834

For those who just want the answer using the ruby driver:

# actual number of records
DB["posts"].find({"author" => "john"}).to_a.length
=> 48
# *total* number of documents in the collection (the query matching is ignored)
DB["posts"].count({"author" => "john"})
=> 1431
# more efficient way (using the count server-side command)
DB["posts"].find({"author" => "john"}).count
=> 1431

Upvotes: 2

Gates VP
Gates VP

Reputation: 45307

Is it possible use the count() Mongodb feature with filter parameters in some other way?

From the shell (command-line), you can do the following:

db.collection.find({ data : value}).count()

Obviously, you'll have to do something similar with Ruby, but it should be pretty straightforward.

Upvotes: 3

Related Questions