2013-04-15 56 views
0

猫鼬模式包括这样的:的MongoDB:按日期将NULL字段排序为早日

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

我的目标是获取通过的dueDate分类与顶部的最快日期文档,然后剩下的没有的dueDate 。我的问题是不需要截止日期,因此没有dueDate的文档会在有效日期的文档上排序。

这是我如何对它进行排序(node.js的& mongoose.js):

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

我主要是寻找一个内置的方式做到这一点;我已经通过组合查询实施了黑客行为。

+0

http://en.wikipedia.org/wiki/Lexicographical_order这样做,如果你想这些值出现在底部,你将需要创建日期的“最大”值和初始化您的文件该最大值作为其默认值。 – Sammaye

+0

不幸的是,还有其他的东西取决于该字段为空。我可能会考虑重新设计,所以它不会。感谢您的意见。 –

+1

有人想过要改变这种方式,只有字母顺序才能实现这个功能,事实上JIRA门票有些地方可能会吸引我搜索,但是这是关于从SQL迁移到MongoDB的那些“难题”之一: ( – Sammaye

回答

1

下面是日期的解决方法这将需要每例如日期字段1个附加字段类型进行排序(该溶液可用于号码以及)

  1. 商店在这个新字段中的非空日期(或数字的-ve)的否定时期

  2. 按日期排序升序排列会代表按此排列降序-ve epoch。空值将在最后,因为这是MongoDB按降序排列数据的方式。实际日期(或数字)字段将按升序显示,结束时为空。

  3. 如果需要按照降序对日期(或数字)进行排序,则需要在原始日期(或数字)字段上排序,而不是在-ve时间点排序。