Sort, Skip and Limit Records in MongoDB Aggregation

Kamran Ahmed
InstructorKamran Ahmed
Share this video with your friends

Social Share Links

Send Tweet
Published 4 years ago
Updated 3 years ago

In our last lesson, we learnt the basics of MongoDB aggregation and saw how we can find and manipulate data. In this continuation, we will see how we can sort, skip and limit records during our aggregation stages.

The aggregation stages/operators covered in this video are:

You can see the list of all the available operators in the MongoDB docs.

Kamran Ahmed: [0:00] Here, in our tweets collection, we have a field called retweet_count which tells us the number of times this tweet was retweeted. To sort the tweets by this field, we will do db.tweets.aggregate().

[0:11] We're going to pass in the ID of stages, where our first stage is the $sort operator. We're sorting with a retweet_count in the descending order. Now, if we run this query, you will see that the first tweet that we get has the most retweets.

[0:23] Let's say that we want to get tweets only from the verified users. We can do that by simply adding another stage called $match where we are filtering all the documents which have user.verified set to true. If we run this query, you will see that in all the documents user.verified is true.

[0:37] If you look at the results, you will see that we are getting a lot of retweets also. Let's say that we want to get only the original tweets. We'll add one more condition to our stage, searching for tweets where retweeted_status is null. Now, if we run it, our first tweet is not a retweet anymore.

[0:52] If you look at the results, we have a lot of data that is not relevant to us. Let's get rid of all of this by adding another stage called $project where we're getting tweet from the $text property, getting username from $user.screen_name, and we're getting retweet_count as it is. Now, if we run this, in our results we only have the three fields.

[1:10] Let's say that we want to get only the top five tweets. We can do that by adding another stage called $limit where we're limiting it to five only. Now, if we run this query, you will see that we're getting only the five top retweeted tweets.

[1:22] There's also a $skip operator, which we can use to skip the results in our aggregation. Let's say that we want to get only the second most retweeted tweet, which is this one. To do that, I will change my limit to one. I will add another stage to skip the top tweet and get the second one. Now, if we run this, you'll see that we're getting the second tweet, which is this one.

egghead
egghead
~ 13 minutes ago

Member comments are a way for members to communicate, interact, and ask questions about a lesson.

The instructor or someone from the community might respond to your question Here are a few basic guidelines to commenting on egghead.io

Be on-Topic

Comments are for discussing a lesson. If you're having a general issue with the website functionality, please contact us at support@egghead.io.

Avoid meta-discussion

  • This was great!
  • This was horrible!
  • I didn't like this because it didn't match my skill level.
  • +1 It will likely be deleted as spam.

Code Problems?

Should be accompanied by code! Codesandbox or Stackblitz provide a way to share code and discuss it in context

Details and Context

Vague question? Vague answer. Any details and context you can provide will lure more interesting answers!

Markdown supported.
Become a member to join the discussionEnroll Today