2012-07-31 60 views
2

我有一个对象报告包含两个整数字段:月和年。 我需要通过 “日期”由两个字段mongoid排序

Report.desc(:year).desc(:month).each do |a| 
puts a.year.to_s + " " + a.month.to_s 
end 

结果对它进行排序:

2011 12 
2011 11 
2012 7 
2012 6 
2012 5 
2012 4 
2012 3 
2012 2 
2012 1 

虽然我觉得让

2012 7 
2012 6 
2012 5 
2012 4 
2012 3 
2012 2 
2012 1 
2011 12 
2011 11 

我在做什么错?

的Mongoid标准是这样的:

irb(main):043:0> Report.desc(:year).desc(:month) 

    => #<Mongoid::Criteria 
      selector: {}, 
      options: {:sort=>{"year"=>-1, "month"=>-1}}, 
      class: Report, 
      embedded: true> 
+0

你试过'.desc(:year,:month)'吗?阅读[原始文档](http://mongoid.org/en/origin/docs/options.html#sorting)让我认为这是你需要的。这假定你正在使用Mongoid 3.我认为可能发生的事情是你的第二个'desc'调用覆盖你的第一个。 Mongoid从你的整个搜索中构建一个单一的查询,所以它不应该一个接一个地执行。虽然这并不符合你的标准,但这很奇怪。 – 2012-07-31 20:11:37

回答

4

你得到的结果只能按月排序不是整个日期(这样你得到的结果)。也许在考虑年份和月份的主体的情况下使用sort_by方法? 喜欢的东西:

Report.sort_by{|t| [-t.year, -t.month]} 

编辑:我使用的年份和月份两者的底片,以实现递减的顺序。

+0

这工作得很好,谢谢,但在我的例子中是什么问题? – 2012-07-31 07:28:13

+1

正如我在按年分类后说的那样,按月排序。这种情况一次又一次地发生在不同时。因此,只有按月排列的数组忽略了年份。顺便提一下,按照年份和月份排列的排序顺序是足够的,我相信。 – 2012-07-31 07:30:22

+0

奇怪...我用mongoid标准更新了这个问题,但我仍然无法理解问题出在哪里,因为那里还有我一起排序2个字段... – 2012-07-31 07:32:24