2013-10-08 40 views
2

我正在嘗試查找按日期排序的集合中的文檔。這有效,但我在底部的日期字段中獲得帶有null的文檔,我首先需要這些文檔。按空值先排序日期

MyModel.find({ }, null, { sort: { date: -1 } }, function(err, models) { 
    // Models sorted with the "largest" date first and models with null dates last 
}); 

如果我更改排序,以{ date: 1 }我得到先是用null的文件,但命令另有相反的是,我不想要的。

我該如何達到理想的行爲?

+0

除了(或者執行的map/reduce),我不認爲這是可能的(另請參閱[這篇關於Mongo的文檔數據庫在排序時比較不同的類型](http://docs.mongodb.org/manual/reference/method/cursor.sort/#return-natural-order))。 – robertklep

回答

3

不幸的是,似乎沒有無用的方法來做到這一點,類似於SQL的「nulls first」/「nulls last」語法。該功能在此蒙戈錯誤提到:

https://jira.mongodb.org/browse/SERVER-153

在那裏的循環與自定義排序功能較大的特點。 (我真希望這個被分解成一個單獨的功能要求,因爲我想實現的空第一/最後一位應該比自定義排序功能更容易,還提供了很多有價值的。)

無論如何,該變通暫時是除了剛纔分別查詢爲空值,以現有查詢:

How are null values in a MongoDB index sorted?

MyModel.find({ date: null }); 
MyModel.find({ date: { $ne: null } }).sort({ date: -1 } }); 
從手動訴諸他們