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的数组