我有这样的疑问:
@allJobs = Job.where(:merchant_id => session[:admin_id].to_s).sort(:start_date.desc).limit(100)
当我跑步的时候,我会得到:
jobs count 1720
我希望看到:
jobs count 100
我做错什么了?
如果我尝试运行job.all(query.limit(100))我将得到“数组foo的未定义方法限制”
似乎我无法将结果限制为按开始日期降序排序的100条记录!
更新:
我甚至不能做这样简单的事情:
@allJobs = Job.limit(100)
Rails.logger.info("@allJobs count is " + @allJobs.count.to_s)
慰问:
@allJobs count is 2080
.limit()在我看来完全没用。
最佳答案
对我来说,用where开始我的子句,并进一步缩小它们的范围,或者修改它们似乎是合乎逻辑的……在mongomapper中,我发现查询的严格性比说一个需要按正确顺序执行的sql select查询要“宽松”得多……我倾向于或多或少地用这个fashio编写查询。N:
ModelClass.where(some criteria).[sort | order | another where clause | fields | limit].[all | first | paginate]
此外,需要注意的是,mongomapper返回一个查询,并且在添加需要结果的内容之前不会实际执行该查询。例如:
all
,first
,paginate
,sort
等。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
这里有更多的细节:http://technicaldebt.com/mongomapper-query-review/对于底层的大胆查询语法,这里有:https://github.com/mongomapper/plucky
关于mongodb - Mongo_mapper限制结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20778135/