我有一份文档,其中有一个名为“ratings”的字段。这是一个对象数组,每个对象都包含userId和ratingValue。
ratings: Array
0: Object
userId: "uidsample1"
ratingValue: 5
1: Object
userId:"uidsample2"
ratingValue:1.5
我希望进行聚合管道以在数组中的一个评级被更新或添加时计算新的平均值。然后,我想将该值作为名为averageRating的新字段放入文档中。
我尝试了展开操作,然后使用$avg:"ratings.ratingValue"的$add field,但它会添加到展开的文档中,而且无法得到平均值。它看起来像这样(不完全是因为在Compass上测试)
db.test.aggregate{
[
{
$unwind: {
path: "$ratings"
}
},
{
$addFields {
averageRating: {
$avg: "$ratings.ratingValue"
}
}
}
]
}
这个问题的查询结构应该如何设计?