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.
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.
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.
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.
JavaScript1const express = require('express'); 2const mongoose = require('mongoose'); 3 4const app = express(); 5const PORT = 3000; 6 7// Set mongoose strictQuery to true to suppress deprecation warning 8mongoose.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.
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.
JavaScript1// Connect to MongoDB 2mongoose.connect('mongodb://127.0.0.1:27017/todo-app', { 3 useNewUrlParser: true, 4 useUnifiedTopology: true 5}).then(() => { 6 console.log('Connected to MongoDB'); 7}).catch((error) => { 8 console.error('Connection error', error); 9 process.exit(1); 10});
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.
Let's define a schema and a model for our ToDo items. This is important because it allows us to structure our data consistently.
JavaScript1// Define a schema and model for ToDo items 2const todoSchema = new mongoose.Schema({ 3 task: { type: String, required: true } 4}); 5 6const 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.
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.
JavaScript1app.use(express.json()); 2 3// Route to get all todos 4app.get('/todos', async (req, res) => { 5 try { 6 const todos = await Todo.find(); 7 res.json(todos); 8 } catch (error) { 9 res.status(500).json({ message: 'Failed to load todos' }); 10 } 11});
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.
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!