Node.js / Mongoose /按顺序sorting和显示

我有一个小问题,以原始顺序显示结果集。 我的mongoose“查询”就是:

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

水库的日志是好的,我的结果是按重量顺序正确sorting。

我用一个forEach循环在ejs模板中显示结果如下:

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

它以“伪随机”顺序显示我的结果…例如:2,3,4,1,9,10,6 …

在我的模式中,权重参数是一个数字

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

更新:

我对结果执行另一个查询,像这样的循环:

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

我在我的循环中构build了一个新的对象列表,这个列表是谁发送到视图来显示元素。

我认为js重新排列数组…

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

韩国社交协会。 感谢你的帮助。 C。

我不知道为什么它不适合你。 请尝试像这样…

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

UPDATE

async.each是一个asynchronous函数,这意味着callback会async.each 。 所以如果你不想丢失数组的顺序,你应该使用一个简单的for循环,或者你可以在async.each完成后重新sorting数组。

谢谢@nabeel,你的回答让我走上正路:)

用async重新sorting对象数组的解决scheme是async.sortBy()

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

结果现在是sorting的数组