2014-02-28 147 views
1

我有一點問題需要按原始順序顯示結果集。 我的貓鼬「查詢」很簡單:Node.js/Mongoose /按順序排序並顯示

myCollection.find({}, null, {sort: {weight: 1}}, function (err, res) { 
    //etc... 
}); 

RE的記錄是好的,我的結果是正確的重量遞增排序。

我顯示與在EJS模板foreach循環這樣的結果:

<% res.forEach(function(r) { %> 
    <%= r.weight %> 
<% }) %> 

,它顯示我造成「僞隨機」爲了...... 例如:2,3,4 ,1,9,10,6 ...

在我的架構,重量參數是一個數

weight   : { type: Number, default: 0, required: false } 

UPDATE:

我執行另一個查詢的結果,在這樣一個循環:

newResult = []; 
async.each(res, function(r, callback) { 
    // some actions with r ... 
    newResult.push(r); 
}, ....); 

我構建我的循環對象的一個​​新的列表,它是這個名單是誰發送到顯示元素的視圖。

我認爲JS重新排序陣列...

是否有可能保持原有的秩序?

Tks。 感謝您的幫助。 C.

+0

'typeof(r.weight)'在循環內輸出了什麼? – cantera

+0

'typeof(r.weight)'returns「number」 – ceadreak

+0

不要以爲我明白更新中發生了什麼 - 是否與原始問題有關? – cantera

回答

1

謝謝@nabeel,你的回答使我對正確的方式:)

的解決方案來重新排序與異步對象的數組是async.sortBy()

async.sortBy(newResult, function(n, callback){ 
    callback(err, n.sort.criteria); 
}, function(err, results){ 
    callback(null, results); 
}); 

結果現在是排序陣列

1

我不確定爲什麼它不適合你。請嘗試像這樣...

myCollection.find() 
    .sort("weight") 
    .exec(function (err, res) { 
    //etc... 
}); 

UPDATE

async.each是一個異步功能,這意味着回調可能失靈。所以如果你不想丟失數組的順序,你應該使用一個簡單的for循環,或者你可以在async.each完成後重新排序數組。

+0

Tks,但我已經嘗試過。相同的結果... – ceadreak

+0

請分享模式 – nabeel

+0

模式很好,我認爲這是一個js數組問題。請檢查我的答案更新。感謝您的幫助 – ceadreak