gpt4 book ai didi

node.js - 如何在 MongoDB 中按点赞数和时间对帖子进行排序?

转载 作者:太空宇宙 更新时间:2023-11-04 00:12:31 26 4
gpt4 key购买 nike

所以我有一个帖子集合,其中两个字段是:赞成票和时间戳。

我正在尝试为每个帖子添加另一个名为“points”的字段,用于汇总点赞数和时间戳。

即这将允许我对帖子进行$排序,并将得分最高的帖子升至顶部。

例如:如果发布内容 < 10 分钟前:10 分,< 1 小时前:6 分,< 4 小时前:4 分,24 小时前:0 分。那么 1 个赞也值 1 分。两票赞成 2 分等...

4 小时前发布的内容(4 分),如果有 3 次点赞(3 分),则可获得 7 分

1 小时前发布的内容(6 点)如果有 2 次点赞(2 点)将获得 8 点

非常感谢任何帮助?

最佳答案

您可以在 3.4 中尝试以下聚合进行自定义排序。

使用$switch$add总结 $addFields 中的点赞数和权重将计算值保留为文档中的额外字段,后跟 $sort按字段排序。

$project使用排除删除排序字段以获得预期输出。

db.col.aggregate([
{"$addFields":{
"sort_order":{
"$switch":{
"branches":[
{"case":{"$lt":[{"$subtract":[new Date(),"$timestamp"]},10*1000],"then":{"$add":["$upvotes",10]}}},
{"case":{"$lt":[{"$subtract":[new Date(),"$timestamp"]},60*1000],"then":{"$add":["$upvotes",6]}}},
{"case":{"$lt":[{"$subtract":[new Date(),"$timestamp"]},4*60*1000],"then":{"$add":["$upvotes",4]}}},
{"case":{"$lt":[{"$subtract":[new Date(),"$timestamp"]},24*60*1000],"then":{"$add":["$upvotes",0]}}}
],
"default":0}
}
}},
{"$sort":{"sort_order":-1}},
{"$project":{"sort_order":0}}
])

关于node.js - 如何在 MongoDB 中按点赞数和时间对帖子进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48831463/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com