2013-04-15 52 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時間點排序。