Connecting Node.js to MongoDB using Mongoose

Renil GaralaRenil Garala
4 min read

If you're starting your journey in backend development, you've probably heard words like Node.js, MongoDB, and Mongoose. But what are they? And how do they work together?

This article will explain everything from the basics to real code examples, using simple and clear language.


What is Backend Development?

When you build a website or app, there are two parts:

  • Frontend โ€“ What users see (HTML, CSS, React, etc.)

  • Backend โ€“ What happens behind the scenes (storing data, sending emails, login systems, etc.)

Node.js helps us build the backend using JavaScript (the same language used in the frontend). That makes things easier for beginners.

Why Do We Need a Database?

Every app stores data. For example:

  • Instagram stores your photos and likes

  • Amazon stores your orders and addresses

  • A school system stores student records

We use databases to store and manage data. One popular modern database is MongoDB


What is MongoDB?

MongoDB is a NoSQL database. It stores data in a format like this:

{
  "name": "Renil",
  "age": 20,
  "grade": "A"
}

Each data entry is called a document, and documents are stored inside collections (like tables).


What is Mongoose?

Working with MongoDB directly can be a little tricky. That's why we use Mongoose.

Mongoose is a tool (library) that helps Node.js talk to MongoDB easily.

With Mongoose, we can:

  • Define the structure of our data

  • Add validations (like โ€œage must be a numberโ€)

  • Use easy functions to save, update, or delete data


What is MongoDB Atlas?

MongoDB Atlas is the cloud version of MongoDB. That means:

  • You donโ€™t need to install MongoDB on your computer.

  • You can access your database from anywhere.

  • Itโ€™s perfect for beginners and small projects.


Step-by-Step Setup

Step 1: Create a Free MongoDB Atlas Account

  1. Go to https://www.mongodb.com/cloud/atlas

  2. Click Start Free

  3. Create a free cluster (Shared โ†’ M0)

  4. Choose username and password

  5. Add your current IP address (or allow access from anywhere)

  6. Create a new database and a collection

โ†’ Keep your connection string safe, it looks like this:

mongodb+srv://<username>:<password>@cluster0.abcd123.mongodb.net/<database>?retryWrites=true&w=majority

Step 2: Set Up Your Node.js Project

Make a folder and initialize your project:

mkdir mongo-demo
cd mongo-demo
npm init -y

Install required packages:

npm install express mongoose

Step 3: Project Structure

Letโ€™s keep it simple and clean:

mongo-demo/
โ”œโ”€โ”€ models/
โ”‚   โ””โ”€โ”€ user.js
โ”œโ”€โ”€ index.js

Step 4: Connect to MongoDB Using Mongoose

๐Ÿ”น index.js

import express from 'express';
import mongoose from 'mongoose';
import User from './models/user.js';

const app = express();
app.use(express.json());

// Replace this with your own connection string from MongoDB Atlas
const uri = "mongodb+srv://<username>:<password>@cluster0.mongodb.net/mydb?retryWrites=true&w=majority";

// Connect to MongoDB
mongoose.connect(uri, {
  useNewUrlParser: true,
  useUnifiedTopology: true,
}).then(() => {
  console.log("Connected to MongoDB");
}).catch(err => {
  console.error("Failed to connect", err);
});

// Simple route to test API
app.get('/', (req, res) => {
  res.send('API is running...');
});

// Route to create user
app.post('/users', async (req, res) => {
  try {
    const user = new User(req.body);
    await user.save();
    res.status(201).send(user);
  } catch (err) {
    res.status(400).send({ error: err.message });
  }
});

app.listen(3000, () => {
  console.log('๐Ÿš€ Server is running on http://localhost:3000');
});

Step 5: Create a Schema

๐Ÿ”น models/user.js

import mongoose from 'mongoose';

const userSchema = new mongoose.Schema({
  name: {
    type: String,
    required: true,
  },
  age: Number,
  email: {
    type: String,
    required: true,
    unique: true,
  }
});

const User = mongoose.model('User', userSchema);
export default User;

Step 6: Test the API

Use Postman or Thunder Client (VS Code) to test the endpoint:

POST /users

Body (JSON):

{
  "name": "Renil",
  "age": 20,
  "email": "renil@example.com"
}

You should get a response like:

{
  "_id": "64eaa1b1234",
  "name": "Renil",
  "age": 20,
  "email": "renil@example.com"
}

Watch Full Video Here

๐Ÿ‘‰ My YouTube Video

This video will guide you step-by-step on everything explained above.

๐Ÿ’ก Final Tip for Beginners

You donโ€™t have to master everything at once.

Just remember: Database โ†’ Mongoose โ†’ Express โ†’ Routes โ†’ Done!

This is a great starting point for building your own web apps.

1
Subscribe to my newsletter

Read articles from Renil Garala directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Renil Garala
Renil Garala

A 20-year-old web developer, certified in Java. Pursuing a BCA in the third year and currently learning full-stack web development from Chaicode.