Node.js / Mongoose / Sort&按顺序显示

时间:2014-02-28 14:38:00

标签: node.js mongodb mongoose ejs

按原始顺序显示结果集有点问题。 我的猫鼬“查询”很简单:

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

res的日志很好,我的结果按权重asc分类正确。

我在ejs模板中使用forEach循环显示结果,如下所示:

<% 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);
}, ....);

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

我认为js重新排序数组...

是否可以保留原始订单?

韩国社交协会。 感谢您的帮助。下进行。

2 个答案:

答案 0 :(得分:1)

我不确定为什么它不适合你。请尝试这样......

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

<强>更新

async.each是一个异步函数,这意味着回调可能出现故障。因此,如果您不想丢失数组的顺序,则应使用简单的for循环,或者在async.each完成后重新排序数组。

答案 1 :(得分:1)

谢谢@nabeel,你的答案以正确的方式引导我:)

使用async重新排序对象数组的解决方案是async.sortBy()

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

结果现在是排序数组