我正在做一个项目,我需要使用 Java 计算 MongoDB 数据的平均评分。但是,我遇到了一个问题,即计算出的平均值与预期结果不符。我已经检查了代码和数据,但我无法确定差异的原因。 我从计算中获得的平均评分是 1.309375 但是,根据提供的值,如果我没有忘记如何对结果进行平均,我预计平均评分为 3.325。
这是我使用的代码:
public Page<Movie> allMovies(Pageable pageable) throws Exception {
Page<Movie> movies = movieRepository.findAll(pageable);
List<ReviewSummary> reviewSummaries = reviewSummaryRepository.findAll();
int numRatings = reviewSummaries.size(); // Moved this line outside the loop
Map<String, Double> avgRatings = new HashMap<>();
for (ReviewSummary reviewSummary : reviewSummaries) {
String imdbId = reviewSummary.getMovieImdbId();
double rating = reviewSummary.getRating();
if (!avgRatings.containsKey(imdbId)) {
avgRatings.put(imdbId, rating);
} else {
double totalRating = avgRatings.get(imdbId) + rating;
double avgRating = totalRating / numRatings; // Changed reviewSummaries.size() to numRatings
avgRatings.put(imdbId, avgRating);
}
}
for (Movie movie : movies) {
String imdbId = movie.getImdbId();
if (avgRatings.containsKey(imdbId)) {
double avgRating = avgRatings.get(imdbId);
movie.setAvgRating(avgRating);
} else {
movie.setAvgRating(0.0);
}
}
return movies;
}
这是我在邮递员收到的电影请求中得到的
"imdbId": "tt8760708",
"title": "M3GAN",
"releaseDate": "2023-01-06",
"trailerLink": "https://www.youtube.com/watch?v=BRb4U99OU80",
"poster": "https://image.tmdb.org/t/p/w500/xBl5AGw7HXZcv1nNXPlzGgO4Cfo.jpg",
"genres": [
"Science Fiction",
"Horror",
"Comedy"
],
"backdrops": [
"https://image.tmdb.org/t/p/original/5kAGbi9MFAobQTVfK4kWPnIfnP0.jpg",
"https://image.tmdb.org/t/p/original/dlxzUj7z1MqEcFiwvvrj0bvBKDY.jpg",
"https://image.tmdb.org/t/p/original/q2fY4kMXKoGv4CQf310MCxpXlRI.jpg",
"https://image.tmdb.org/t/p/original/pTxwFdsdDWzpCRYuk1QbggdaOlL.jpg",
"https://image.tmdb.org/t/p/original/1zuz2RgFoOjulkjjNHHFc3WiHGB.jpg",
"https://image.tmdb.org/t/p/original/7HqxI1IXMloT9VTSuDC8ikaj810.jpg",
"https://image.tmdb.org/t/p/original/vpK2rp3J5LiC01HoNM0j9DEHQ1T.jpg",
"https://image.tmdb.org/t/p/original/cNHXdmr4amP6EPCMa0dqD8rwzDV.jpg",
"https://image.tmdb.org/t/p/original/txQLFd6rfQrskQhFENkS1jElptt.jpg",
"https://image.tmdb.org/t/p/original/dC4tj1ONdlZ2TWv4XD2SA1KUnJN.jpg"
],
"reviewIds": [
{
"id": {
"timestamp": 1683393168,
"date": "2023-05-06T17:12:48.000+00:00"
},
"userEmail": "[email protected]",
"movieImdbId": "tt8760708",
"rating": {
"id": {
"timestamp": 1683393168,
"date": "2023-05-06T17:12:48.000+00:00"
},
"userEmail": "[email protected]",
"movieImdbId": "tt8760708",
"value": 3.5
},
"body": "Seem a bit meh "
},
{
"id": {
"timestamp": 1683393413,
"date": "2023-05-06T17:16:53.000+00:00"
},
"userEmail": "[email protected]",
"movieImdbId": "tt8760708",
"rating": {
"id": {
"timestamp": 1683393413,
"date": "2023-05-06T17:16:53.000+00:00"
},
"userEmail": "[email protected]",
"movieImdbId": "tt8760708",
"value": 3.5
},
"body": "Seem a bit meh "
},
{
"id": {
"timestamp": 1683393446,
"date": "2023-05-06T17:17:26.000+00:00"
},
"userEmail": "[email protected]",
"movieImdbId": "tt8760708",
"rating": {
"id": {
"timestamp": 1683393446,
"date": "2023-05-06T17:17:26.000+00:00"
},
"userEmail": "[email protected]",
"movieImdbId": "tt8760708",
"value": 2.0
},
"body": "good enough "
},
{
"id": {
"timestamp": 1683393489,
"date": "2023-05-06T17:18:09.000+00:00"
},
"userEmail": "[email protected]",
"movieImdbId": "tt8760708",
"rating": {
"id": {
"timestamp": 1683393489,
"date": "2023-05-06T17:18:09.000+00:00"
},
"userEmail": "[email protected]",
"movieImdbId": "tt8760708",
"value": 4.3
},
"body": "very good"
}
],
"ratings": [
{
"id": {
"timestamp": 1683393168,
"date": "2023-05-06T17:12:48.000+00:00"
},
"userEmail": "[email protected]",
"movieImdbId": "tt8760708",
"value": 3.5
},
{
"id": {
"timestamp": 1683393413,
"date": "2023-05-06T17:16:53.000+00:00"
},
"userEmail": "[email protected]",
"movieImdbId": "tt8760708",
"value": 3.5
},
{
"id": {
"timestamp": 1683393446,
"date": "2023-05-06T17:17:26.000+00:00"
},
"userEmail": "[email protected]",
"movieImdbId": "tt8760708",
"value": 2.0
},
{
"id": {
"timestamp": 1683393489,
"date": "2023-05-06T17:18:09.000+00:00"
},
"userEmail": "[email protected]",
"movieImdbId": "tt8760708",
"value": 4.3
}
],
----> here is the issue "avgRating": 1.309375,
"predictedRating": 0.0,
"similarity": 0.0