2016-07-22 149 views
0

我試圖排序基於用戶的選擇(名稱,客戶端,日期等),MongoDB的一個集合。對於名稱和客戶端,排序工作正常,因爲它按字符串排序,但是,當按日期字段排序時,結果不準確(這很奇怪,因爲將其更改爲上升或下降確實會改變結果,但它不是返回正確的順序流星/ MongoDB的:按日期排序集合返回不正確的結果

下面是排序的代碼:。

let sort_order = {}; 
//columnSortType is date field and columnSortDirection is either 1 or -1 
sort_order[instance.state.get("columnSortType")] = instance.state.get("columnSortDirection"); 
if (instance.state.get("showAllServers")) { 
    return Servers.find({}, {sort: sort_order}); 
} 

下面是樣本的結果給你搞砸了訂單(剛返回的日期字段)的一個更好的想法這是排序通過升序通過簡單的降序排序翻轉的文章:

2016年5月25日
2016年5月25日
2016年5月25日
2016年4月23日
2016年4月23日
2016年4月23日
2016年3月23日
2016年3月23日
2016年3月23日
2016年7月21日
2016年7月21日
2016年7月21日

我碰到this posting這似乎遇到類似問題給我,但是,我日期字段在保存到數據庫時肯定是ISODate格式。例如,2016-04-23看起來像這樣:ISODate(「2016-04-23T04:00:00Z」)。這讓我認爲這可能是時區問題或內部時鐘問題,儘管在兩臺單獨的計算機上本地運行它仍會返回相同的結果。

更新 - 已解決

我想通了,排序似乎是不正確的順序的原因(它實際上是正確返回,它只是在視覺上似乎沒有被這種方式)。我使用了moment.js格式化客戶端的日期,這意味着如果一個對象以前有空白的日期,那麼moment.js會在當前的日期填入所述的日期。這就是爲什麼有些日期似乎是錯誤的順序,因爲排序沒有考慮到新添加的日期 - 這些日期並未保存到數據庫中。

+0

你能創建重現它一個簡單的測試案例? – MasterAM

+0

你是按多列排序?也許,還有一些其他列優先於日期。 – vijayst

+0

@MasterAM是的,我已經用新的日期值試過了,仍然得到相同的結果。 –

回答

0

我想通了,排序似乎是不正確的順序(它實際上是正確返回,它只是在視覺上似乎沒有被這種方式)的原因。我使用了moment.js格式化客戶端的日期,這意味着如果一個對象以前有空白的日期,那麼moment.js會在當前的日期填入所述的日期。這就是爲什麼有些日期似乎是錯誤的順序,因爲排序沒有考慮到新添加的日期 - 這些日期並未保存到數據庫中。