4

我正在尝试在集合中查找文档,按日期排序。这行得通,但是我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,但否则顺序是相反的,这是我不想要的。

我怎样才能实现所需的行为?

4

1 回答 1

6

不幸的是,似乎没有简单的方法可以做到这一点,类似于 SQL 的“nulls first”/“nulls last”语法。此 Mongo 错误中提到了此功能:

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

它与自定义排序功能的更大功能相结合。(我真的希望这被分解成一个单独的功能请求,因为我认为实现空值的第一个/最后一个位应该比自定义排序函数容易得多,并且仍然提供很多价值。)

无论如何,暂时的解决方法是在现有查询之外单独查询空值:

MongoDB 索引中的空值如何排序?

MyModel.find({ date: null });
MyModel.find({ date: { $ne: null } }).sort({ date: -1 } });
于 2014-02-17T23:21:00.227 回答