jvm*_*jvm 5 mongodb aggregation-framework
我们需要根据一些定义的算法对记录进行排名.我们的MongoDB中有4个字段如下;
{
"rating" : 3.5
"review" : 4
"revenue" : 100
"used" : 3.9
},
{
"rating" : 1.5
"review" : 2
"revenue" : 10
"used" : 2.1
}
Run Code Online (Sandbox Code Playgroud)
在查询数据时,我们将发送%作为计算的权重.因此,假设我们发送30%的评级,30%的评论和20%的收入和ud sed.
现在我们需要根据以下计算对每条记录进行评分.
Score per column = (Existing Value - Average(Column) / StandardDeviation) * %weightage
for rating = (3.5 - 2.5) /1 * 30% = .03
Run Code Online (Sandbox Code Playgroud)
因此,我们需要计算每列(或字段)的得分,并且所有4个字段的总数将为每个记录提供得分.
是否可以使用任何MongoDB内置函数进行此类计算?
提前致谢
Mongo 有默认的运算符来查找标准差 ($stdDevPop) 和查找平均值 ($avg),显然还有减法、乘法和除法。
因此,使用所有这些运算符,您绝对可以根据需要编写聚合。
我已经在下面完成了评级,您可以对其他字段使用相同的逻辑。
另外,将 0.3 替换为您的权重百分比。
db.collection.aggregate([
{
$match: {
rating: {
$ne: null
}
}
},
{
$group: {
_id: null,
ratings: {
$push: "$rating"
},
avg_rating: {
$avg: "$rating"
},
std_deviation_rating: {
$stdDevPop: "$rating"
}
}
},
{
$project: {
ratings: {
$map: {
input: "$ratings",
as: "rating",
in: {
$multiply: [
{
$divide: [
{
$subtract: [
"$$rating",
"$avg_rating"
]
},
"$std_deviation_rating"
]
},
0.3
]
}
}
}
}
}
])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
126 次 |
| 最近记录: |