Node.js MongoDB: Limit the Number of Results

Welcome to The Coding College! In this tutorial, we’ll explore how to limit the number of documents retrieved from a MongoDB collection using Node.js. Limiting results is essential for paginating data or controlling the number of records displayed at once.


Prerequisites

Before diving into the implementation, ensure the following:

  1. Node.js Installed: Download Node.js.
  2. MongoDB Installed: Install MongoDB.
  3. MongoDB Driver Installed: Run: npm install mongodb

Step 1: Connect to MongoDB

Create a file named limitData.js and add the following code to connect to MongoDB:

const { MongoClient } = require('mongodb');

// MongoDB connection URL
const url = 'mongodb://localhost:27017';
const client = new MongoClient(url);

// Database and Collection Names
const dbName = 'myNewDatabase';
const collectionName = 'users';

async function connectToDatabase() {
  try {
    await client.connect();
    console.log('Connected to MongoDB.');
    return client.db(dbName).collection(collectionName);
  } catch (err) {
    console.error('Database connection error:', err.message);
  }
}

Step 2: Use the limit() Method

MongoDB provides the limit() method to specify the maximum number of documents to return.

Example: Retrieve the First 5 Documents

async function getLimitedDocuments() {
  const collection = await connectToDatabase();

  try {
    const documents = await collection.find().limit(5).toArray();
    console.log('Retrieved documents:', documents);
  } catch (err) {
    console.error('Error retrieving documents:', err.message);
  } finally {
    await client.close();
  }
}

getLimitedDocuments();

Step 3: Combine limit() with sort()

You can combine limit() with sort() to retrieve a specific set of documents in a particular order.

Example: Retrieve the 3 Oldest Users

async function getOldestUsers() {
  const collection = await connectToDatabase();

  try {
    const documents = await collection.find().sort({ age: 1 }).limit(3).toArray();
    console.log('Oldest users:', documents);
  } catch (err) {
    console.error('Error retrieving users:', err.message);
  } finally {
    await client.close();
  }
}

getOldestUsers();

Step 4: Implement Pagination

Pagination involves using both limit() and skip() to fetch a specific set of results.

Example: Fetch Results for Page 2 (Assuming 5 Documents per Page)

async function getPaginatedResults(page = 2, pageSize = 5) {
  const collection = await connectToDatabase();

  try {
    const skipCount = (page - 1) * pageSize;
    const documents = await collection.find().skip(skipCount).limit(pageSize).toArray();
    console.log(`Page ${page} results:`, documents);
  } catch (err) {
    console.error('Error with pagination:', err.message);
  } finally {
    await client.close();
  }
}

getPaginatedResults();

Example Outputs

  1. Limited Documents: Connected to MongoDB. Retrieved documents: [ { _id: 1, name: 'John' }, { _id: 2, name: 'Alice' }, ... ]
  2. Sorted and Limited Results: Connected to MongoDB. Oldest users: [ { _id: 3, name: 'Bob', age: 20 }, { _id: 5, name: 'Chris', age: 22 }, ... ]
  3. Paginated Results: Connected to MongoDB. Page 2 results: [ { _id: 6, name: 'Eve' }, { _id: 7, name: 'Frank' }, ... ]

Best Practices

  1. Indexing: Use indexes on frequently queried fields to improve performance.
  2. Dynamic Pagination: Accept page and pageSize as inputs from the user for flexible pagination.
  3. Default Limits: Set a default limit to avoid fetching an excessive number of documents.
  4. Error Handling: Handle scenarios where the collection has fewer documents than requested.

Conclusion

Limiting results in MongoDB using Node.js is a simple yet powerful way to manage data retrieval, especially for paginated content. By combining limit(), sort(), and skip(), you can efficiently control the flow of data to your application.

For more tutorials on coding and programming, visit The Coding College.

Happy coding! 🚀

Leave a Comment