Javascript 为MongoDB/Mongoose中的帖子创建排名算法

Javascript 为MongoDB/Mongoose中的帖子创建排名算法,javascript,node.js,mongodb,algorithm,mongoose,Javascript,Node.js,Mongodb,Algorithm,Mongoose,我正在为MongoDB中的帖子创建排名算法。我正在使用一个聚合管道,并按如下方式计算排名: 算法: (0.1(喜欢)+0.01(浏览)+0.05(共享))/(0.6+0.01(创建以来的时间)^2) 我面临的问题是,如果这篇文章是全新的,还没有被浏览/分享/喜欢,那么这篇文章的排名将始终为0 是否有可能找到在过去X小时内创建的任何帖子,并根据所有其他帖子的平均排名给它们一个排名,以便将它们插入结果中 const posts = await Posts.aggregate([{

我正在为MongoDB中的帖子创建排名算法。我正在使用一个聚合管道,并按如下方式计算排名:

算法:

(0.1(喜欢)+0.01(浏览)+0.05(共享))/(0.6+0.01(创建以来的时间)^2)

我面临的问题是,如果这篇文章是全新的,还没有被浏览/分享/喜欢,那么这篇文章的排名将始终为0

是否有可能找到在过去X小时内创建的任何帖子,并根据所有其他帖子的平均排名给它们一个排名,以便将它们插入结果中

const posts = await Posts.aggregate([{
                $match: {}
            },
            {
                $project: {
                    ranking: {
                        $divide: [{
                            $add: [{
                                    $multiply: ["$likes", 0.1]
                                },
                                {
                                    $multiply: ["$views", 0.01]
                                },
                                {
                                    $multiply: ["$shares", 0.05]
                                }]
                        }, {
                            $add: [
                                0.6,
                                {
                                    $multiply: [{
                                        $pow: [{
                                            $divide: [{
                                                $subtract: [new Date(), "$createdAt"]
                                            }, CONSTANTS.MILLISECONDS_IN_ONE_HOUR]

                                        }, 2]
                                    }, 0.01]
                                }
                            ]
                        }]
                    }
                }
            }, {
                $sort: {
                    ranking: -1
                }
            }
        ]);

        console.log(posts);