我正在尝试在按日期排序的集合中查找文档。这很有效,但我在底部的日期字段中得到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 :(得分: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 } });