2012-07-31 66 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