使用$avg mongodb插入新字段
每次用户对某篇文章的评分从1到5,该数字就会以userId作为属性名写入(作为属性值)使用$avg mongodb插入新字段,mongodb,meteor,average,Mongodb,Meteor,Average,每次用户对某篇文章的评分从1到5,该数字就会以userId作为属性名写入(作为属性值) "starRatingByUser" : { "iZxSjCduTjfCQbmf9" : 3, "LvBr6a427ofuvXFMp" : 4, "gfhfhfh98rtgfXFft" : 5 } 是否可以在用户每次添加或更新评级时插入(更新)新字段(“starRatingAverage”)和所有评级的平
"starRatingByUser" : {
"iZxSjCduTjfCQbmf9" : 3,
"LvBr6a427ofuvXFMp" : 4,
"gfhfhfh98rtgfXFft" : 5
}
是否可以在用户每次添加或更新评级时插入(更新)新字段(“starRatingAverage”)和所有评级的平均值
例如:
"starRatingAverage": 4,
"starRatingByUser" : {
"iZxSjCduTjfCQbmf9" : 3,
"LvBr6a427ofuvXFMp" : 4,
"gfhfhfh98rtgfXFft" : 5
}
我有这个方法:
Recipes.update(
{ _id: recipeId },
{ $set: { ["starRatingByUser." + this.userId]: star }}
)
[示例图像]
:在mongodb中有一个使用聚合进行更新的选项
- 以下更新查询设置为两个参数。首先是查找文档,其次是进行聚合
- 使用
将对象转换为数组以计算总数$objectToArray
- 使用
获取数组的大小,并使用$size
$reduce
删除不需要的字段$project
db.colelction.updateOne(
{_id:1},
[
{
$addFields: {
stu: {
"$objectToArray": "$starRatingByUser"
}
}
},
{
$addFields: {
size: {
$size: "$stu"
},
total: {
$reduce: {
input: "$stu",
initialValue: 0,
in: {
$add: [
"$$this.v",
"$$value"
]
}
}
}
}
},
{
"$project": {
starRatingByAverage: {
"$divide": [
"$total",
"$size"
]
},
starRatingByUser: 1
}
}
])
此查询已检查,工作正常这非常不清楚,请更新或更新