Mongoose架构包括:
{
dueDate: { type: Date, required: false }
}
我的目标是获取按dueDate排序的文档,其中最快的日期位于顶部,其次是没有dueDate的其余日期。我的问题是不需要截止日期,因此没有dueDate的文档会在具有有效日期的文档之上排序。
这就是我对它的排序方式(node.js& mongoose.js):
query.sort({ dueDate: 'asc' });
我主要是寻找内置的方法来做到这一点;我已经通过组合查询实现了一个hack。
答案 0 :(得分:1)
没有内置的方法来做到这一点。打开了一张故障单,可以让帮助程序可以执行自定义排序功能,它是有计划的,但没有计划:https://jira.mongodb.org/browse/SERVER-153
检查此主题:Is there a way to put all the nil value at the end when sorting with mongodb/mongoid?
此致 Moacy
答案 1 :(得分:1)
以下是日期类型的解决方法,每个此类日期字段需要另外一个字段进行排序(此解决方案也可用于数字)
在此新字段中存储非空日期(或编号的-ve)的否定纪元。
按日期升序排序将意味着按此-ve epoch降序排序。 Nulls将在最后,因为这是MongoDB按降序排序数据的方式。实际日期(或数字)字段将按升序显示,结尾处为空。
如果在按日期(或数字)降序排序时需要空值,则按原始日期(或数字)字段排序,而不是-ve epoch。