Node.js 按日期排序,首先为空
我想在一个按日期排序的集合中查找文档。这是可行的,但是我在底部的日期字段中得到了Node.js 按日期排序,首先为空,node.js,mongodb,mongoose,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的文档
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
的文档,但在其他情况下,顺序是相反的,这是我不想要的
如何实现所需的行为?不幸的是,似乎没有简单的方法可以做到这一点,类似于SQL的“nulls first”/“nulls last”语法。此Mongo bug中提到了此功能: 在这里,它与自定义排序函数的更大功能循环在一起。(我真希望能将其分解为一个单独的功能请求,因为我认为只实现空值的第一位/最后一位应该比自定义排序函数容易得多,并且仍然提供很多价值。) 无论如何,目前的解决办法是,除了现有的查询之外,只需单独查询空值:
除了手动使用它们(或者可能使用map/reduce),我认为这是不可能的(另请参见)。
MyModel.find({ date: null });
MyModel.find({ date: { $ne: null } }).sort({ date: -1 } });