Open In App

Mongoose Aggregate.prototype.sort() API

Improve
Improve
Like Article
Like
Save
Share
Report

The Aggregate sort() method of the Mongoose API is used to perform aggregation tasks. It allows us to sort all the documents in a collection based on the fields that we provide. It also provides us the flexibility to sort the input documents in ascending or descending order.

Syntax:

aggregate().sort( { fieldName : sortOrder } )

Parameters: This method accepts a single parameter as discussed below:

  • string/object: It is used to specify the name of the field in the collection. We can provide the field name in String format or as an Object along with sorting order.

Return Value: This method returns a result set in the form of an array.

Setting up Node.js Mongoose Module:

Step 1: Create a Node.js application using the following command:

npm init

Step 2: After creating the NodeJS application, Install the required module using the following command:

npm install mongoose

Project Structure: The project structure will look like this: 

 

Database Structure: The database structure will look like this, the following documents are present in the collection.

 

Example 1: In this example, we have established a database connection using mongoose and defined model over userSchema, having two fields “name”, and “bornYear”. At the end, we are calling the sort() method to sort the result set based on bornYear in ascending order. To sort it in ascending order we have to provide “1” as a value to bornYear field and to sort in descending order value field value should be “-1”.

Filename: app.js

Javascript




// Require mongoose module
const mongoose = require("mongoose");
  
// Set Up the Database connection
    useNewUrlParser: true,
    useUnifiedTopology: true,
});
  
const userSchema = new mongoose.Schema({
    name: String,
    bornYear: Number
});
  
const User = mongoose.model('User', userSchema);
  
User.aggregate().sort({ 'bornYear': 1 })
    .then(result => {
        console.log(result)
    })


Step to run the program: To run the application execute the below command from the root directory of the project:

node app.js

Output:

[
  {
    _id: new ObjectId("6387aa99c92df30f995e8309"),
    name: 'Aakash',
    bornYear: 2000,
    __v: 0
  },
  {
    _id: new ObjectId("6387aa99c92df30f995e830a"),
    name: 'Ayush',
    bornYear: 2000,
    __v: 0
  },
  {
    _id: new ObjectId("6387aa99c92df30f995e830b"),
    name: 'Rahul',
    bornYear: 2000,
    __v: 0
  },
  {
    _id: new ObjectId("6387aa99c92df30f995e830e"),
    name: 'Takshwi',
    bornYear: 2018,
    __v: 0
  },
  {
    _id: new ObjectId("6387aa99c92df30f995e830c"),
    name: 'Mivan',
    bornYear: 2019,
    __v: 0
  },
  {
    _id: new ObjectId("6387aa99c92df30f995e830d"),
    name: 'Sidiksha',
    bornYear: 2019,
    __v: 0
  },
  {
    _id: new ObjectId("6387aa99c92df30f995e830f"),
    name: 'Kashwi',
    bornYear: 2021,
    __v: 0
  },
  {
    _id: new ObjectId("6387aa99c92df30f995e8310"),
    name: 'Kinjal',
    bornYear: 2021,
    __v: 0
  }
]

Example 2: In this example, we are using pipeline object by passing object array argument. First we are sorting bornYear field in descending order and then sorting has been performed on name field in ascending order.

Filename: app.js

Javascript




// Require mongoose module
const mongoose = require("mongoose");
  
// Set Up the Database connection
    useNewUrlParser: true,
    useUnifiedTopology: true,
});
  
const userSchema = new mongoose.Schema({
    name: String,
    bornYear: Number
});
  
const User = mongoose.model('User', userSchema);
  
User.aggregate([{ $sort: { bornYear: -1, name: 1 } }])
    .exec((error, result) => {
        if (error) {
            console.log(error)
        } else {
            console.log(result)
        }
    })


Step to run the program: To run the application execute the below command from the root directory of the project:

node app.js

Output:

[
  {
    _id: new ObjectId("6387aa99c92df30f995e830f"),
    name: 'Kashwi',
    bornYear: 2021,
    __v: 0
  },
  {
    _id: new ObjectId("6387aa99c92df30f995e8310"),
    name: 'Kinjal',
    bornYear: 2021,
    __v: 0
  },
  {
    _id: new ObjectId("6387aa99c92df30f995e830c"),
    name: 'Mivan',
    bornYear: 2019,
    __v: 0
  },
  {
    _id: new ObjectId("6387aa99c92df30f995e830d"),
    name: 'Sidiksha',
    bornYear: 2019,
    __v: 0
  },
  {
    _id: new ObjectId("6387aa99c92df30f995e830e"),
    name: 'Takshwi',
    bornYear: 2018,
    __v: 0
  },
  {
    _id: new ObjectId("6387aa99c92df30f995e8309"),
    name: 'Aakash',
    bornYear: 2000,
    __v: 0
  },
  {
    _id: new ObjectId("6387aa99c92df30f995e830a"),
    name: 'Ayush',
    bornYear: 2000,
    __v: 0
  },
  {
    _id: new ObjectId("6387aa99c92df30f995e830b"),
    name: 'Rahul',
    bornYear: 2000,
    __v: 0
  }
]

Reference: https://mongoosejs.com/docs/api/aggregate.html#aggregate_Aggregate-sort



Last Updated : 06 Dec, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads