gpt4 book ai didi

mongodb - Mongoose :分数查询然后按分数排序 - 非文本字段

转载 作者:可可西里 更新时间:2023-11-01 10:02:50 26 4
gpt4 key购买 nike

在我的数据库中,我有一系列书籍。每个都有:

  • 点赞数
  • 反对票数
  • 观看次数

我想按如下评分对我的数据库进行排序:

  • 点赞:8分
  • 反对票:-4 分
  • 观点:1/2 点

所以分数将是:

(NumberOfViews*(1/2)) + (NumberOfDownvotes*-4)+ (NumberOfUpvotes*8)

如果我有:

book1 = {name:'book1', views:3000,upvotes:340, downvotes:120}
book2 = {name:'book2', views:9000,upvotes:210, downvotes:620}
book3 = {name:'book3', views:7000,upvotes:6010, downvotes:2}

分数应该是:

book1Score = 3740
book2Score = 3700
book3Score = 51572

查询应该输出

book3,book1,book2

我怎样才能在 Mongoose 中实现这样的事情?

好处:如果我希望较新的记录在同一查询中的排名高于较旧的记录怎么办?

谢谢

最佳答案

好吧,我最终在 mongoose 中完成了所有工作。

我每 24 小时运行一次此查询以重新对我的收藏进行评分。

Book.aggregate(
[
//I match my query
{$match:query},
{
$project: {
//take the id for reference
_id: 1,
//calculate the score of the views
viewScore: {
$multiply: [ "$views", 0.5 ]
},
//calculate the score of the upvotes
upvoteScore: {
$multiply: [ {$size: '$upvotes'}, 8 ]
},
//calculate the score of the downvotes
downvoteScore: {
$multiply: [ {$size: '$downvotes'}, -4 ]
}
}
},
{
//project a second time
$project: {
//take my id for reference
_id: 1,
//get my total score
score: {
$add:['$viewScore','$upvoteScore','$downvoteScore']
},
}
},
//sort by the score.
{$sort : {'score' : -1}},
]
)

关于mongodb - Mongoose :分数查询然后按分数排序 - 非文本字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39312701/

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