按日期排序,第一个为空

Hav*_*ret 4 mongoose mongodb node.js

我正在尝试按日期顺序在集合中查找文档。这行得通,但是我null在底部的日期字段中获得了带有文档的文档,我想要这些文档。

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

如果我将排序更改为首先要{ date: 1 }获取文档null,但是顺序相反,这是我不希望的。

我怎样才能达到预期的行为?

tks*_*sfz 5

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

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

使用自定义排序功能的较大功能进行循环的地方。(我真的希望将其分解为一个单独的功能请求,因为我认为实现null首/尾位应该比自定义排序功能容易得多,并且仍然可以提供很多价值。)

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

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

MyModel.find({ date: null });
MyModel.find({ date: { $ne: null } }).sort({ date: -1 } });
Run Code Online (Sandbox Code Playgroud)