2

Mongoose 架构包括:

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

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

这就是我对其进行排序的方式(node.js 和 mongoose.js):

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

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

4

2 回答 2

2

这是日期类型的解决方法,每个此类日期字段需要 1 个附加字段进行排序(此解决方案也可用于数字)

  1. 在这个新字段中存储非空日期(或数字的 -ve)的负纪元

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

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

于 2016-09-03T06:11:24.997 回答
1

没有内置的方法可以做到这一点。有一张票可以让助手可以做定制的排序功能,这是计划但没有计划: https ://jira.mongodb.org/browse/SERVER-153

检查这个线程:有没有办法在使用 mongodb/mongoid 排序时将所有 nil 值放在最后?

问候, 莫西

于 2013-04-24T02:46:06.800 回答