【发布时间】:2021-04-14 14:39:46
【问题描述】:
我正在关注 MongoDB 大学的聚合管道课程。
这是“电影”集合的格式。
{
"_id" : ObjectId("573a1390f29313caabcd4cf1"),
"title" : "Ingeborg Holm",
"cast" : [
"Aron Lindgren",
"Erik Lindholm",
],
"imdb" : {
"rating" : 7,
},
}
这是我的聚合:
db.movies.aggregate( [
{ $unwind: { path: "$cast" } },
{ $set: { "average": 0 } },
{ $group: {
_id: "$cast",
numFilms: { $sum: 1 },
average: { $avg: { $add: ["$average", "$imdb.rating"] } }, //failed here
}}
] )
我想做的事:
根据每个演员的每部电影计算平均评分 (imdb.rating)。
目前发生的情况:
发生错误
$add: ["$average", "$rating"]
出现以下消息错误:
"errmsg" : "$add 只支持数字或日期类型,不支持字符串",
问题:
有人能解释为什么 $rating 被认为是一个字符串吗?
我在上面提供了一个如何格式化“电影”集合的示例。 似乎 $add 仅在 $group 中调用时才以“$imdb.rating”失败 (并且在使用“$imdb.rating”时在 $group 之外正常工作)
还有其他计算平均值的方法吗?
【问题讨论】:
-
你有
imdb.rating: ""的记录吗? -
确实有一种情况,imdb.rating 等于 ""
-
完美,您可以删除
""值或将它们设置为0。或者您可以使用答案中提到的$convert。
标签: mongodb aggregation