Retrieving All Records with Mongoose

Today, we will be diving into Mongoose to effectively retrieve and manipulate data from a MongoDB database using Node.js. This lesson will guide you step-by-step through setting up Mongoose, creating schemas and models, connecting to a database, and retrieving all records.

What You'll Learn

In this lesson you'll learn:

  • Setting up a Mongoose schema and model.
  • Connecting to a MongoDB database using Mongoose.
  • Retrieving all records from a collection using the find method.
Introduction to MongoDB

MongoDB is a NoSQL database that stores data in flexible, JSON-like documents. It's crucial for handling varying data structures and large-scale data requirements, making it a popular choice for modern web applications.

Step 1: Setting up the Project

Let's start by setting up our Node.js project and installing necessary packages. This is important because having a clean and organized project structure makes development more straightforward.

const express = require('express');
const mongoose = require('mongoose');

const app = express();
const PORT = 3000;

// Set mongoose strictQuery to true to suppress deprecation warning
mongoose.set('strictQuery', true);

In this code, we are initializing a new Node.js project by requiring the express and mongoose packages. We set up an Express application and configure Mongoose to avoid deprecation warnings by setting strictQuery to true.

Step 2: Connecting to MongoDB

Now we'll connect to our MongoDB database using Mongoose. This step is crucial because it establishes a connection to our data storage, enabling us to interact with the database.

// Connect to MongoDB
mongoose.connect('mongodb://127.0.0.1:27017/todo-app', {
    useNewUrlParser: true,
    useUnifiedTopology: true
}).then(() => {
    console.log('Connected to MongoDB');
}).catch((error) => {
    console.error('Connection error', error);
    process.exit(1);
});

Here, we use the mongoose.connect method to connect to a MongoDB database named todo-app. The useNewUrlParser and useUnifiedTopology options ensure compatibility. If the connection is successful, a message is logged. Otherwise, an error is logged and the process exits.

Step 3: Defining a Mongoose Schema and Model

Let's define a schema and a model for our ToDo items. This is important because it allows us to structure our data consistently.

// Define a schema and model for ToDo items
const todoSchema = new mongoose.Schema({
    task: { type: String, required: true }
});

const Todo = mongoose.model('Todo', todoSchema);

We define a todoSchema using mongoose.Schema which specifies that each ToDo item should have a task field of type String and it is required. We then create a model called Todo based on this schema. The model provides an interface to interact with the documents.

Step 4: Creating Express Routes to Retrieve Data

Now we'll set up a route to retrieve all ToDo items from the database. This is helpful for displaying or manipulating all ToDo records in our application.

app.use(express.json());

// Route to get all todos
app.get('/todos', async (req, res) => {
    try {
        const todos = await Todo.find();
        res.json(todos);
    } catch (error) {
        res.status(500).json({ message: 'Failed to load todos' });
    }
});

We set up a JSON parser middleware using express.json() to handle incoming JSON requests. Next, we define a GET route /todos. Within this route, we use Todo.find() to retrieve all ToDo items from the database. The results are then sent as a JSON response. If an error occurs, we handle it by sending a 500 status and an error message.

Conclusion

In this lesson, we've learned how to set up a basic Node.js project with Express and Mongoose, connect to a MongoDB database, define schemas and models, and retrieve all records from a collection. This knowledge forms the foundation for more advanced data retrieval and manipulation techniques with Mongoose. Happy coding!

Sign up
Join the 1M+ learners on CodeSignal
Be a part of our community of 1M+ users who develop and demonstrate their skills on CodeSignal