首页 > 解决方案 > 如何使用 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
        });
});

但它只是按字母顺序返回评论。

非常感谢您的帮助,并为我糟糕的英语感到抱歉。

标签: javascriptnode.jsmongodbmongoose

解决方案


您需要聚合框架和$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
        });
});

推荐阅读