MongoDB:按日期排序将空字段视为较早的日期

时间:2013-04-15 15:05:56

标签: javascript node.js mongodb sorting mongoose

Mongoose架构包括:

{
  dueDate: { type: Date, required: false }
}

我的目标是获取按dueDate排序的文档,其中最快的日期位于顶部,其次是没有dueDate的其余日期。我的问题是不需要截止日期,因此没有dueDate的文档会在具有有效日期的文档之上排序。

这就是我对它的排序方式(node.js& mongoose.js):

query.sort({ dueDate: 'asc' });

我主要是寻找内置的方法来做到这一点;我已经通过组合查询实现了一个hack。

2 个答案:

答案 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)

以下是日期类型的解决方法,每个此类日期字段需要另外一个字段进行排序(此解决方案也可用于数字)

  1. 在此新字段中存储非空日期(或编号的-ve)的否定纪元

  2. 按日期升序排序将意味着按此-ve epoch降序排序。 Nulls将在最后,因为这是MongoDB按降序排序数据的方式。实际日期(或数字)字段将按升序显示,结尾处为空。

  3. 如果在按日期(或数字)降序排序时需要空值,则按原始日期(或数字)字段排序,而不是-ve epoch。