按原始顺序显示结果集有点问题。 我的猫鼬“查询”很简单:
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重新排序数组...
是否可以保留原始订单?
韩国社交协会。 感谢您的帮助。下进行。
答案 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);
});
结果现在是排序数组