按日期排序,首先为null

时间:2013-10-08 13:19:04

标签: node.js mongodb mongoose

我正在尝试在按日期排序的集合中查找文档。这很有效,但我在底部的日期字段中得到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的文档,但其他顺序是反向的,我不想要。

如何实现理想的行为?

1 个答案:

答案 0 :(得分:5)

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

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

使用自定义排序功能的更大功能进行循环。 (我真的希望这被分解为一个单独的功能请求,因为我认为只实现 空的第一位/最后一位应该比自定义排序功能容易得多并且仍然提供很多价值。)< / p>

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

How are null values in a MongoDB index sorted?

MyModel.find({ date: null });
MyModel.find({ date: { $ne: null } }).sort({ date: -1 } });