【发布时间】:2018-05-10 14:02:39
【问题描述】:
我有以下架构
var reviewSchema = new Schema({
restaurantID: ObjectId,
rating: {
food: Number,
service: Number,
value: Number
},
});
我想获得一系列平均食物、评级、服务评级,所以我这样做了
Review.aggregate([
{
$match: {
restaurantID: mongoose.Types.ObjectId(reviewData.restaurantid)
}
},
{
$unwind: "$rating"
},
{
$group:{
_id: "$rating",
total_rating: { $avg: { $add: [ "$rating.food", "$rating.service", "$rating.value" ] } }
}
}
], function(review_error, reviews) {
但是,首先,它没有得到三个字段的平均值,它只得到字段的总和。没关系,我可以自己将其除以 3。最大的问题是它忽略了重复的结果。我尝试将结果打印出来:
[ { _id: { food: 4, service: 5, value: 4 }, total_rating: 13 },
{ _id: { food: 5, service: 5, value: 5 }, total_rating: 15 } ]
我在集合中有 6 条 { _id: { food: 5, service: 5, value: 5 }, total_rating: 15 } 记录。我该如何解决这个问题?谢谢!
更新:示例
评论合集
{
"_id" : ObjectId("5af3d804d0d09e18b098208f"),
"rating" : {
"food" : NumberInt(5),
"service" : NumberInt(5),
"value" : NumberInt(5)
},
"restaurantID" : ObjectId("5ac962bd437c1e30e89406a8"),
}
{
"_id" : ObjectId("5af3d817d0d09e18b0982090"),
"rating" : {
"food" : NumberInt(5),
"service" : NumberInt(5),
"value" : NumberInt(5)
},
"restaurantID" : ObjectId("5ac962bd437c1e30e89406a8"),
}
{
"_id" : ObjectId("5af3d89161cc0a0e60f0925d"),
"rating" : {
"food" : NumberInt(4),
"service" : NumberInt(5),
"value" : NumberInt(4)
},
"restaurantID" : ObjectId("5ac962bd437c1e30e89406a8"),
}
预期结果
[ { _id: { food: 5, service: 5, value: 5 }, total_rating: 15 },
{ _id: { food: 4, service: 5, value: 4 }, total_rating: 13 },
{ _id: { food: 5, service: 5, value: 5 }, total_rating: 15 } ]
实际结果
[ { _id: { food: 4, service: 5, value: 4 }, total_rating: 13 },
{ _id: { food: 5, service: 5, value: 5 }, total_rating: 15 } ]
【问题讨论】:
-
显示一小部分文档以及实际上可以“从该样本”获得的预期结果。这将使您更清楚地了解您实际需要实现的目标。
-
我已经用一个小样本更新了帖子
标签: mongodb mongoose aggregation-framework