mongodbruby-on-rails-3mongomapperdatabase

Mongo_mapper limit results


I have a query like this:

  @allJobs = Job.where(:merchant_id => session[:admin_id].to_s).sort(:start_date.desc).limit(100)

When I run .count on this I get:

 jobs count 1720

I expect to see :

 jobs count 100

What am I doing wrong?

If I try to run Job.all(query).limit(100) I get "undefined method limit for Array #foo"

It seems there is no way I can get the results to restrict to 100 records sorted in descending order by start_date!

UPDATE:

I cannot even do something simple like this:

@allJobs = Job.limit(100)
      Rails.logger.info("@allJobs count is " + @allJobs.count.to_s)

Console:

@allJobs count is 2080

.limit() is completely useless as far as I can tell.


Solution

  • For me it seems logical to start my clauses with the where, and narrow them down further, or modify them… In MongoMapper, I find querying rigor is much more “loose” than say a SQL SELECT query that requires things in proper order… I would tend to write my queries in more or less this fashion:

    ModelClass.where(some criteria).[sort | order | another where clause | fields | limit].[all | first | paginate]
    

    In addition, it is important to note that MongoMapper returns a query and does not actually perform the query until you add something that needs the results. For example: all, first, paginate, sort, etc.

    2.0.0-p247 :001 > Structure.where(:address => /NJ/).count
     => 22 
    2.0.0-p247 :002 > Structure.where(:address => /NJ/).limit(2).count
     => 22 
    2.0.0-p247 :003 > Structure.where(:address => /NJ/).limit(2).all.count
     => 2 
    

    More details here: http://technicaldebt.com/mongomapper-query-review/ and for the underlying Plucky query syntax, here: https://github.com/mongomapper/plucky