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 / 按顺序排序和显示的主要内容,如果未能解决你的问题,请参考以下文章

在猫鼬中,我如何按日期排序? (node.js)

如何按 ID node.js 过滤猫鼬集合

Node.js mongoose:如何使用查询的 .in 和 .sort 方法?

Node.js 可以排队多少个事件?

使用 Node.JS,如何按时间顺序获取文件列表?

按顺序发出请求 Node.js