Understanding the Mongoose exec() Function: Guide With Examples

Updated: December 30, 2023 By: Guest Contributor Post a comment

The exec() function in Mongoose isn’t a feature added on a specific date to the language; rather, it’s a method provided by Mongoose, an Object Data Modeling (ODM) library for MongoDB and Node.js, that has been part of the library for many versions. It is used for executing a query that has been built up using the Mongoose chainable query builder.

The primary purpose of the exec() function is to execute a built query and return a promise, allowing better handling of both asynchronous operations and potential errors using promise chains or async/await syntax.

Syntax and Parameters

Query.prototype.exec([operation], [callback])

The exec() function optionally takes an operation argument and a callback. If no callback is provided, it returns a promise.

exec() returns a promise that resolves with the result of the query if no callback is provided.

Code Examples

1. Basic Query Execution

Summary: This example demonstrates executing a simple query to find all documents within a collection.

const mongoose = require('mongoose');
const { Schema } = mongoose;

const userSchema = new Schema({ name: String, age: Number });
const User = mongoose.model('User', userSchema);


const query = User.find({ age: { $gte: 18 } });
query.exec().then(users => {
}).catch(err => {
  throw err;

2. Using Async/Await

Summary: This example shows how to use the async/await syntax along with exec() to handle query execution.

const mongoose = require('mongoose');
const { Schema } = mongoose;

// ... (setup User model as previously shown) ...


async function findAdults() {
  try {
    const adults = await User.find({ age: { $gte: 18 } }).exec();
  } catch(err) {



In this guide, you have learned about the exec() function provided by Mongoose for Node.js. It supports the modern asynchronous nature of JavaScript by returning a promise when it is not given a callback function. By understanding how to use exec(), one can more effectively write queries that are both easy to read and robust in handling asynchronous database interactions within a Node.js and MongoDB environment.