javascript - 如何使用 nodejs 按其内部数组大小对数组进行排序?
问题描述
每个人。我对这个后端很陌生,我开始弄清楚基础知识。我在 NodeJS 和 mongoose 上制作了一个基本的帖子和评论系统。问题是现在我想获得评论最多的帖子,所以在主页上我可以显示最受欢迎的帖子。
我想返回具有最大评论 ID 数组的帖子。
我首先尝试这样做:
var mysort = { comments: 1 };
Post.find( {} )
.sort(mysort)
.exec( (err, posts)=>{
if(err) {
return res.status(400).json({
ok: false,
message: 'Error loading posts',
});
}
return res.status(200).json({
ok: true,
posts: posts
});
});
但它只是按字母顺序返回评论。
非常感谢您的帮助,并为我糟糕的英语感到抱歉。
解决方案
您需要聚合框架和$size运算符来使用$addFields创建临时字段,然后您可以使用$sort按该字段排序(-1
表示降序)
Post.aggregate([
{
$addFields: {
commentsCount: { $size: "$comments" }
}
},
{
$sort: { commentsCount: -1 }
}
]).exec( (err, posts)=>{
if(err) {
return res.status(400).json({
ok: false,
message: 'Error loading posts',
});
}
return res.status(200).json({
ok: true,
posts: posts
});
});
推荐阅读
- methods - 编译器/解释器设计:内置方法应该有自己的节点还是应该使用查找表?
- python - Python - 将前缀(公斤等)转换为基数
- r - 使用存储过程在 SQL 表中插入 R 数据帧
- c# - 如何将具有对象列表的类作为属性绑定到转发器?
- ghost-blog - 在 URL 中使用斜杠?
- java - 无法在 Spring Boot 上构建可执行 JAR
- javascript - 与 Antd Form 反应 onFinish 不检索数据
- java - 如何使用杰克逊反序列化没有标签的xml元素
- oracle - 针对 Oracle ADF 应用程序的赛普拉斯测试自动化
- javascript - (javascript) 使用“call”调用 es6 getter