w3resource

MongoDB query to retrieve top-rated movie


Write a query in MongoDB to find the movie with the highest IMDb rating and viewer rating on Tomatoes from the ‘movies’ collection.

Structure of 'movies' collection:

{
    _id: ObjectId("573a1390f29313caabcd42e8"),
plot: 'A group of bandits stage a brazen train hold-up, only to find a determined posse hot on their heels.',
genres: [ 'Short', 'Western' ],
runtime: 11,
cast: [
      'A.C. Abadie',
      "Gilbert M. 'Broncho Billy' Anderson",
      'George Barnes',
      'Justus D. Barnes'
    ],
poster: 'https://m.media-amazon.com/images/M/MV5BMTU3NjE5NzYtYTYyNS00MDVmLWIwYjgtMmYwYWIxZDYyNzU2XkEyXkFqcGdeQXVyNzQzNzQxNzI@._V1_SY1000_SX677_AL_.jpg',
title: 'The Great Train Robbery',
fullplot: "Among the earliest existing films in American cinema - notable as the first film that presented a narrative story to tell - it depicts a group of cowboy outlaws who hold up a train and rob the passengers. They are then pursued by a Sheriff's posse. Several scenes have color included - all hand tinted.",
languages: [ 'English' ],
released: ISODate("1903-12-01T00:00:00.000Z"),
directors: [ 'Edwin S. Porter' ],
rated: 'TV-G',
awards: { wins: 1, nominations: 0, text: '1 win.' },
lastupdated: '2015-08-13 00:27:59.177000000',
year: 1903,
imdb: { rating: 7.4, votes: 9847, id: 439 },
countries: [ 'USA' ],
type: 'movie',
tomatoes: {
viewer: { rating: 3.7, numReviews: 2559, meter: 75 },
fresh: 6,
critic: { rating: 7.6, numReviews: 6, meter: 100 },
rotten: 0,
lastUpdated: ISODate("2015-08-08T19:16:10.000Z")
    }
.....

Query:

db.movies.aggregate([
  {
    $project: {
      _id: 1,
title: 1,
imdbRating: "$imdb.rating",
tomatoViewerRating: "$tomatoes.viewer.rating"
    }
  },
  {
    $sort: {
imdbRating: -1,
tomatoViewerRating: -1
    }
  },
  {
    $limit: 1
  }
])

Output:

  {
    _id: ObjectId("573a13e5f29313caabdc418e"),
title: 'Adama',
imdbRating: '',
tomatoViewerRating: 4.9
  }

Explanation:

The said query in MongoDB that retrieves the movie with the highest IMDb rating and Tomato viewer rating from the 'movies' collection in MongoDB.

The stage $project reshapes the documents in the collection and includes the fields "_id", "title", "imdbRating", and "tomatoViewerRating" in the output.

The $sort stage sorts the documents based on the "imdbRating" and "tomatoViewerRating" fields in descending order to arrange the movies with the highest IMDb rating and Tomato viewer rating will be placed at the top.

The $limit stage limits the result to only one document to return only the top-rated movie.

Improve this sample solution and post your code through Disqus.

Previous: Retrieve award-winning movies sorted by year.

What is the difficulty level of this exercise?



Follow us on Facebook and Twitter for latest update.