Node.js / Mongoose / 按顺序排序和显示
Posted
技术标签:
【中文标题】Node.js / Mongoose / 按顺序排序和显示【英文标题】:Node.js / Mongoose / Sort & display in order 【发布时间】:2014-04-01 15:06:04 【问题描述】:我在按原始顺序显示结果集时遇到了一点问题。 我的猫鼬“查询”很简单:
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);
, ....);
我在循环中构造了一个新的对象列表,这个列表被发送到视图以显示元素。
我认为js对数组重新排序...
可以保持原来的顺序吗?
谢谢。 感谢你的帮助。 C.
【问题讨论】:
typeof(r.weight)
在你的循环中输出什么?
typeof(r.weight)
返回“数字”
我不明白更新中发生了什么 - 这与原始问题有关吗?
是的,因为它是发送到视图的 newResult var。
【参考方案1】:
我不确定为什么它不适合你。请尝试这样...
myCollection.find()
.sort("weight")
.exec(function (err, res)
//etc...
);
更新
async.each
是一个异步函数,这意味着回调可能是无序的。因此,如果您不想丢失数组的顺序,您应该使用简单的 for 循环,或者您可以在 async.each
完成后重新排序数组。
【讨论】:
请分享架构 schema不错,我觉得是js数组的问题。请检查我的答案更新。感谢您的帮助 谢谢。有没有一种简单的方法来处理对象数组?我认为不建议在 for 循环中使用回调。 您可以使用同步的_.each
,这样就不会弄乱顺序。如果你想让它保持异步,那么在async.each
之后使用_.sortBy
。 underscorejs.org/#each, underscorejs.org/#sortBy【参考方案2】:
谢谢@nabeel,你的回答让我走上了正确的道路:)
使用异步重新排序对象数组的解决方案是 async.sortBy()
async.sortBy(newResult, function(n, callback)
callback(err, n.sort.criteria);
, function(err, results)
callback(null, results);
);
results 现在是排序后的数组
【讨论】:
以上是关于Node.js / Mongoose / 按顺序排序和显示的主要内容,如果未能解决你的问题,请参考以下文章