title: Group books and get count for each of their ratings
body: <p>I have a Rating model with a book and rating value to it. I would like to get all the ratings count (ratings vary from 1 to 5) for each book in the database.</p>
  
  <p>My schema simply looks like - </p>
  
  <pre><code>    {
        "_id": ObjectId("57e112312a52fe257e5d1d5c"),
        "book": ObjectId("57e111142a52fe257e5d1d42"),
        "rating": 4
      }
      {
        "_id": ObjectId("57e7a002420d22d6106a4715"),
        "book": ObjectId("57e111142a52fe257e5d1d42"),
        "rating": 5
      }
      {
        "_id": ObjectId("57e7a4cd98bfdb5a11962d54"),
        "book": ObjectId("57e111142a52fe257e5d17676"),
        "rating": 5
      }
      {
        "_id": ObjectId("57e7a4cd98bfdb5a11962d54"),
        "book": ObjectId("57e111142a52fe257e5d17676"),
        "rating": 1
      }
  </code></pre>
  
  <p>Currently, i have only been able to get to this point where i can get the no of ratings for each book but it doesn't specify exactly the rating value count.</p>
  
  <p>This is my current query - </p>
  
  <pre><code>    db.ratings.aggregate([
          {$match: {book: {$in: [ObjectId("57e111142a52fe257e5d1d42"), ObjectId('57e6bef7cad79fa38555c643')]}}},
          {$group: {_id: {book: "$book", value: "$value"} } },
          {$group: {_id: "$_id.book", total: {$sum: 1}}},
      ])
  </code></pre>
  
  <p>The output is this - </p>
  
  <pre><code>    {
          "result": [
              {
                  "_id": ObjectId("57e6bef7cad79fa38555c643"),
                  "total": 2
              },
              {
                  "_id": ObjectId("57e111142a52fe257e5d1d42"),
                  "total": 2
              }
          ],
          "ok": 1
      }
  </code></pre>
  
  <p>However, i want to club all the documents and get a result with the count of ratings for each value of the <code>rating</code> field, something like below. The whole point is that i just want the count of ratings for each value for each book.</p>
  
  <pre><code>    {
          result: [
              {
                  _id: "57e111142a52fe257e5d17676",
                  5_star_ratings: 1,
                  4_star_ratings: 3,
                  3_star_ratings: 4,
                  2_star_ratings: 1,
                  1_star_ratings: 0,
              },
              {
                  _id: "57e111142a52fe257e5d1d42",
                  5_star_ratings: 10,
                  4_star_ratings: 13,
                  3_star_ratings: 7,
                  2_star_ratings: 8,
                  1_star_ratings: 19,
              }
              .
              .
              .
              .
          ]
      }
  </code></pre>
  
  <p>How do i go about this?</p>