2012-02-08 52 views

回答

1

我很確定MongoDB的答案是「否」。沒有辦法提供自定義分類功能,只能提供按鍵進行排序。有a request for custom sorting functions,他們甚至提到你的特定用例:

JavaScript的排序幫手自定義排序/索引
[...]
難道這是用來按字母順序排序上的一個字段,並把在結果集的末尾有空值的文檔?
[...]
@nick - 是

所以,你不是一個人在想要把null s的一端或其他。

我認爲你現在所能做的最好是做在Ruby中,這樣的事情:

nils, not_nils = People.asc(:age).partition { |p| p.age.nil? } 
people = not_nils + nils 

我不使用Mongoid但據推測asc爲您提供了一個可枚舉,如果不是那麼也許你可以堅持一個to_a在那裏。當然,如果你正在分頁,這種駭客毫無用處。

+0

感謝您提供所需功能的鏈接。我會遵循這一點。 Mongoid使用標準,所以我需要一個to_a。但我認爲我們畢竟可以沒有零。正如你所說,分頁將使這個重要性不那麼重要。 – 2012-02-08 23:05:47

+0

仔細看後,有什麼建議有基於函數的javascript排序。這意味着要對查詢的集合進行排序,mongodb必須迭代整個集合,這當然不能解決問題。 我希望mongodb擁有的東西簡單得多:null最後一次,或者先null。 – 2012-02-14 08:27:08

+0

@Stephane:無論如何,排序要求數據庫遍歷整個結果集,問題是MongoDB只允許使用'a> b'或'a 2012-02-14 17:38:54

2

如果你不希望升序爲非零年齡。如果這不重要,你可以看看是否

People.desc(:age) 

會把零值放在最後。或者,你可以嘗試添加一個搜索參數不返回零值:

People.not_in(age: [nil]).asc(:age) 
相關問題