<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Surya Deekshith</title>
    <description>The latest articles on DEV Community by Surya Deekshith (@surya_deekshith_53fc7364c).</description>
    <link>https://dev.to/surya_deekshith_53fc7364c</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4224325%2F648bc55f-a110-4198-9020-859cded7addf.jpg</url>
      <title>DEV Community: Surya Deekshith</title>
      <link>https://dev.to/surya_deekshith_53fc7364c</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/surya_deekshith_53fc7364c"/>
    <language>en</language>
    <item>
      <title>A Beginner's Guide to Setting Up MongoDB with Node.js</title>
      <dc:creator>Surya Deekshith</dc:creator>
      <pubDate>Tue, 03 Nov 2026 13:44:52 +0000</pubDate>
      <link>https://dev.to/surya_deekshith_53fc7364c/a-beginners-guide-to-setting-up-mongodb-with-nodejs-4i6o</link>
      <guid>https://dev.to/surya_deekshith_53fc7364c/a-beginners-guide-to-setting-up-mongodb-with-nodejs-4i6o</guid>
      <description>&lt;p&gt;Learn how to connect Node.js to MongoDB, create a database, model data with Mongoose, and build a simple CRUD API — step by step.&lt;br&gt;
MongoDB and Node.js are one of the most popular combinations for building modern backend applications. MongoDB stores data as flexible JSON-like documents, while Node.js lets you build fast JavaScript-powered servers. Together, they are a great starting point for full-stack development.&lt;br&gt;
In this guide, you will set up MongoDB with Node.js from scratch and build a small Tasks API that can create, read, update, and delete tasks.&lt;/p&gt;

&lt;p&gt;By the end, you will know how to:&lt;br&gt;
1.Set up a Node.js project&lt;br&gt;
2.Connect to MongoDB using Mongoose&lt;br&gt;
3.Create a schema and model&lt;br&gt;
4.Build CRUD endpoints with Express&lt;br&gt;
5.Store credentials safely with environment variables&lt;br&gt;
6.Avoid common beginner mistakes&lt;/p&gt;

&lt;p&gt;MongoDB’s official Node.js driver supports connecting to MongoDB Atlas or a local MongoDB instance, and Mongoose is a widely used ODM that adds schemas, validation, and model-based data access on top of MongoDB.&lt;br&gt;
&lt;strong&gt;Prerequisites&lt;/strong&gt;&lt;br&gt;
Before starting, install the following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Node.js — version 16.20.1 or later is recommended by MongoDB’s current Node.js driver documentation.&lt;/li&gt;
&lt;li&gt;npm — installed automatically with Node.js.
3.MongoDB Atlas account — the easiest free way to host a database in the cloud.
4.Code editor — VS Code is a good choice.&lt;/li&gt;
&lt;li&gt;Basic JavaScript knowledge — especially async/await, objects, and arrays.
You do not need to install MongoDB locally for this tutorial. We will use MongoDB Atlas, MongoDB’s managed cloud database service.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;What You Will Build&lt;/strong&gt;&lt;br&gt;
You will create a simple REST API for managing tasks.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpu1jazwyz13pxv888lk9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpu1jazwyz13pxv888lk9.png" alt=" " width="799" height="552"&gt;&lt;/a&gt;&lt;br&gt;
Each task will contain:&lt;br&gt;
{&lt;br&gt;
  "title": "Learn MongoDB",&lt;br&gt;
  "completed": false&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Create the Node.js Project&lt;/strong&gt;&lt;br&gt;
Open your terminal and run:&lt;br&gt;
mkdir node-mongodb-tasks-api&lt;br&gt;
cd node-mongodb-tasks-api&lt;br&gt;
npm init -y&lt;/p&gt;

&lt;p&gt;This creates a folder and a package.json file.&lt;br&gt;
Now install the required dependencies:&lt;/p&gt;

&lt;p&gt;npm install express mongoose dotenv&lt;br&gt;
npm install -D nodemon&lt;/p&gt;

&lt;p&gt;Here is what each package does:&lt;br&gt;
1.express — creates the web server and API routes.&lt;br&gt;
2.mongoose — connects Node.js to MongoDB and helps define data models.&lt;br&gt;
3.dotenv — loads secret values from a .env file.&lt;br&gt;
4.nodemon — automatically restarts the server when you change code.&lt;br&gt;
Open package.json and update the scripts section:&lt;br&gt;
"scripts": {&lt;br&gt;
  "start": "node server.js",&lt;br&gt;
  "dev": "nodemon server.js"&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;You can now start your project in development mode with:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;npm run dev&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Set Up MongoDB Atlas&lt;/strong&gt;&lt;br&gt;
MongoDB Atlas is a cloud-hosted MongoDB service. It is ideal for beginners because you do not need to configure a local database server.&lt;br&gt;
1.Go to MongoDB Atlas.&lt;br&gt;
2.Create a free account.&lt;br&gt;
3.Create a free M0 cluster.&lt;br&gt;
4.Create a database user with a username and password.&lt;br&gt;
5.Add your current IP address to the network access list.&lt;br&gt;
6.Click Connect.&lt;br&gt;
7.Choose Drivers.&lt;br&gt;
8.Select Node.js.&lt;br&gt;
9.Copy the connection string.&lt;br&gt;
MongoDB’s documentation recommends creating a database user, adding your IP address to the access list, and selecting the Node.js driver to obtain a connection string.&lt;br&gt;
Your connection string will look similar to this:&lt;/p&gt;

&lt;p&gt;mongodb+srv://:@cluster0.xxxxx.mongodb.net/?retryWrites=true&amp;amp;w=majority&lt;/p&gt;

&lt;p&gt;Replace  and  with your actual database credentials.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Store Secrets in a .env File&lt;/strong&gt;&lt;br&gt;
Never put your database password directly in your code.&lt;br&gt;
Create a file named .env in your project root:&lt;br&gt;
PORT=5000&lt;br&gt;
MONGODB_URI=mongodb+srv://your_username:&lt;a href="mailto:your_password@cluster0.xxxxx.mongodb.net"&gt;your_password@cluster0.xxxxx.mongodb.net&lt;/a&gt;/taskdb?retryWrites=true&amp;amp;w=majority&lt;/p&gt;

&lt;p&gt;Create another file named .gitignore:&lt;br&gt;
node_modules&lt;br&gt;
.env&lt;br&gt;
This prevents your secrets and dependencies from being uploaded to GitHub.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Connect Node.js to MongoDB&lt;/strong&gt;&lt;br&gt;
Create a file named server.js:&lt;/p&gt;

&lt;p&gt;import express from "express";&lt;br&gt;
import mongoose from "mongoose";&lt;br&gt;
import dotenv from "dotenv";&lt;/p&gt;

&lt;p&gt;dotenv.config();&lt;/p&gt;

&lt;p&gt;const app = express();&lt;/p&gt;

&lt;p&gt;app.use(express.json());&lt;/p&gt;

&lt;p&gt;const PORT = process.env.PORT || 5000;&lt;br&gt;
const MONGODB_URI = process.env.MONGODB_URI;&lt;/p&gt;

&lt;p&gt;mongoose&lt;br&gt;
  .connect(MONGODB_URI)&lt;br&gt;
  .then(() =&amp;gt; {&lt;br&gt;
    console.log("Connected to MongoDB");&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;app.listen(PORT, () =&amp;gt; {
  console.log(`Server running on port ${PORT}`);
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;})&lt;br&gt;
  .catch((error) =&amp;gt; {&lt;br&gt;
    console.error("MongoDB connection failed:", error.message);&lt;br&gt;
    process.exit(1);&lt;br&gt;
  });&lt;/p&gt;

&lt;p&gt;Add this to your package.json so Node.js can use modern import syntax:&lt;br&gt;
"type": "module"&lt;br&gt;
Now run:&lt;br&gt;
npm run dev&lt;br&gt;
If everything is correct, you should see:&lt;br&gt;
Connected to MongoDB&lt;br&gt;
Server running on port 5000&lt;/p&gt;

&lt;p&gt;Mongoose’s official getting-started guide uses mongoose.connect() to open a connection to MongoDB, and MongoDB’s own Mongoose tutorial follows the same connection approach.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5: Create a Mongoose Schema&lt;/strong&gt;&lt;br&gt;
A schema describes the structure of your data.&lt;br&gt;
Create a folder called models, then create a file inside it called Task.js:&lt;/p&gt;

&lt;p&gt;import mongoose from "mongoose";&lt;/p&gt;

&lt;p&gt;const taskSchema = new mongoose.Schema(&lt;br&gt;
  {&lt;br&gt;
    title: {&lt;br&gt;
      type: String,&lt;br&gt;
      required: [true, "Task title is required"],&lt;br&gt;
      trim: true,&lt;br&gt;
      maxlength: [100, "Title cannot exceed 100 characters"]&lt;br&gt;
    },&lt;br&gt;
    completed: {&lt;br&gt;
      type: Boolean,&lt;br&gt;
      default: false&lt;br&gt;
    }&lt;br&gt;
  },&lt;br&gt;
  {&lt;br&gt;
    timestamps: true&lt;br&gt;
  }&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;const Task = mongoose.model("Task", taskSchema);&lt;/p&gt;

&lt;p&gt;export default Task;&lt;/p&gt;

&lt;p&gt;What This Does&lt;br&gt;
1.title must be a string and is required.&lt;br&gt;
2.completed defaults to false.&lt;br&gt;
3.timestamps: true automatically adds createdAt and updatedAt fields.&lt;br&gt;
4.mongoose.model() creates the Task model, which you will use to query the database.&lt;br&gt;
Mongoose helps enforce a semi-rigid schema at the application level, which is useful when you want more structure and validation than raw MongoDB documents provide.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6: Build the CRUD Routes&lt;/strong&gt;&lt;br&gt;
Create a folder named routes, then create a file called taskRoutes.js:&lt;br&gt;
import express from "express";&lt;br&gt;
import Task from "../models/Task.js";&lt;/p&gt;

&lt;p&gt;const router = express.Router();&lt;/p&gt;

&lt;p&gt;// Create a task&lt;br&gt;
router.post("/", async (req, res) =&amp;gt; {&lt;br&gt;
  try {&lt;br&gt;
    const task = await Task.create(req.body);&lt;br&gt;
    res.status(201).json(task);&lt;br&gt;
  } catch (error) {&lt;br&gt;
    res.status(400).json({ error: error.message });&lt;br&gt;
  }&lt;br&gt;
});&lt;/p&gt;

&lt;p&gt;// Get all tasks&lt;br&gt;
router.get("/", async (req, res) =&amp;gt; {&lt;br&gt;
  try {&lt;br&gt;
    const tasks = await Task.find().sort({ createdAt: -1 });&lt;br&gt;
    res.json(tasks);&lt;br&gt;
  } catch (error) {&lt;br&gt;
    res.status(500).json({ error: error.message });&lt;br&gt;
  }&lt;br&gt;
});&lt;/p&gt;

&lt;p&gt;// Get one task&lt;br&gt;
router.get("/:id", async (req, res) =&amp;gt; {&lt;br&gt;
  try {&lt;br&gt;
    const task = await Task.findById(req.params.id);&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if (!task) {
  return res.status(404).json({ error: "Task not found" });
}

res.json(task);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;} catch (error) {&lt;br&gt;
    res.status(400).json({ error: "Invalid task ID" });&lt;br&gt;
  }&lt;br&gt;
});&lt;/p&gt;

&lt;p&gt;// Update a task&lt;br&gt;
router.put("/:id", async (req, res) =&amp;gt; {&lt;br&gt;
  try {&lt;br&gt;
    const task = await Task.findByIdAndUpdate(req.params.id, req.body, {&lt;br&gt;
      new: true,&lt;br&gt;
      runValidators: true&lt;br&gt;
    });&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if (!task) {
  return res.status(404).json({ error: "Task not found" });
}

res.json(task);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;} catch (error) {&lt;br&gt;
    res.status(400).json({ error: error.message });&lt;br&gt;
  }&lt;br&gt;
});&lt;/p&gt;

&lt;p&gt;// Delete a task&lt;br&gt;
router.delete("/:id", async (req, res) =&amp;gt; {&lt;br&gt;
  try {&lt;br&gt;
    const task = await Task.findByIdAndDelete(req.params.id);&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if (!task) {
  return res.status(404).json({ error: "Task not found" });
}

res.json({ message: "Task deleted successfully" });
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;} catch (error) {&lt;br&gt;
    res.status(400).json({ error: "Invalid task ID" });&lt;br&gt;
  }&lt;br&gt;
});&lt;/p&gt;

&lt;p&gt;export default router;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 7: Connect Routes to the Server&lt;/strong&gt;&lt;br&gt;
Update server.js:&lt;br&gt;
import express from "express";&lt;br&gt;
import mongoose from "mongoose";&lt;br&gt;
import dotenv from "dotenv";&lt;br&gt;
import taskRoutes from "./routes/taskRoutes.js";&lt;/p&gt;

&lt;p&gt;dotenv.config();&lt;/p&gt;

&lt;p&gt;const app = express();&lt;/p&gt;

&lt;p&gt;app.use(express.json());&lt;br&gt;
app.use("/api/tasks", taskRoutes);&lt;/p&gt;

&lt;p&gt;app.get("/", (req, res) =&amp;gt; {&lt;br&gt;
  res.json({ message: "Welcome to the Task API" });&lt;br&gt;
});&lt;/p&gt;

&lt;p&gt;const PORT = process.env.PORT || 5000;&lt;br&gt;
const MONGODB_URI = process.env.MONGODB_URI;&lt;/p&gt;

&lt;p&gt;mongoose&lt;br&gt;
  .connect(MONGODB_URI)&lt;br&gt;
  .then(() =&amp;gt; {&lt;br&gt;
    console.log("Connected to MongoDB");&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;app.listen(PORT, () =&amp;gt; {
  console.log(`Server running on port ${PORT}`);
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;})&lt;br&gt;
  .catch((error) =&amp;gt; {&lt;br&gt;
    console.error("MongoDB connection failed:", error.message);&lt;br&gt;
    process.exit(1);&lt;br&gt;
  });&lt;/p&gt;

&lt;p&gt;Your project structure should now look like this:&lt;/p&gt;

&lt;p&gt;node-mongodb-tasks-api/&lt;br&gt;
├── models/&lt;br&gt;
│   └── Task.js&lt;br&gt;
├── routes/&lt;br&gt;
│   └── taskRoutes.js&lt;br&gt;
├── .env&lt;br&gt;
├── .gitignore&lt;br&gt;
├── package.json&lt;br&gt;
└── server.js&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 8: Test the API&lt;/strong&gt;&lt;br&gt;
npm run dev&lt;br&gt;
You can test the API using Postman, Insomnia, or curl.&lt;br&gt;
&lt;strong&gt;Create a Task&lt;/strong&gt;&lt;br&gt;
curl -X POST &lt;a href="http://localhost:5000/api/tasks" rel="noopener noreferrer"&gt;http://localhost:5000/api/tasks&lt;/a&gt; \&lt;br&gt;
  -H "Content-Type: application/json" \&lt;br&gt;
  -d '{"title":"Learn MongoDB with Node.js"&lt;br&gt;
Expected response:&lt;br&gt;
{&lt;br&gt;
  "&lt;em&gt;id": "65f1a2b3c4d5e6f7a8b9c0d1",&lt;br&gt;
  "title": "Learn MongoDB with Node.js",&lt;br&gt;
  "completed": false,&lt;br&gt;
  "createdAt": "2026-11-03T13:00:00.000Z",&lt;br&gt;
  "updatedAt": "2026-11-03T13:00:00.000Z",&lt;br&gt;
  "&lt;/em&gt;_v": 0&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;Get All Tasks&lt;br&gt;
curl &lt;a href="http://localhost:5000/api/tasks" rel="noopener noreferrer"&gt;http://localhost:5000/api/tasks&lt;/a&gt;&lt;br&gt;
Update a Task&lt;br&gt;
curl -X PUT &lt;a href="http://localhost:5000/api/tasks/YOUR_TASK_ID" rel="noopener noreferrer"&gt;http://localhost:5000/api/tasks/YOUR_TASK_ID&lt;/a&gt; \&lt;br&gt;
  -H "Content-Type: application/json" \&lt;br&gt;
  -d '{"completed":true}'&lt;/p&gt;

&lt;p&gt;Delete a Task&lt;br&gt;
curl -X DELETE &lt;a href="http://localhost:5000/api/tasks/YOUR_TASK_ID" rel="noopener noreferrer"&gt;http://localhost:5000/api/tasks/YOUR_TASK_ID&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common Beginner Mistakes&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Exposing Your Database Password&lt;br&gt;
Never commit your .env file to GitHub.&lt;br&gt;
Always add this to .gitignore:&lt;br&gt;
".env"&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Forgetting express.json()&lt;br&gt;
Without this middleware, Express cannot read JSON request bodies:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;app.use(express.json());&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Using the Wrong Connection String
Make sure you copied the Node.js driver connection string from MongoDB Atlas, not another language’s connection string.&lt;/li&gt;
&lt;li&gt;Not Handling Errors
Database operations can fail. Always use try/catch around asynchronous MongoDB operations.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Next Steps&lt;br&gt;
Once this works, try improving the project:&lt;br&gt;
1.Add validation for empty titles.&lt;br&gt;
2.Add filtering: GET /api/tasks?completed=true.&lt;br&gt;
3.Add pagination using limit and skip.&lt;br&gt;
4.Add user authentication with JWT.&lt;br&gt;
5.Deploy the API to Render, Railway, or Vercel.&lt;br&gt;
6.Connect it to a React frontend.&lt;br&gt;
&lt;strong&gt;Final Project Code&lt;/strong&gt;&lt;br&gt;
Your complete server.js should look like this:&lt;br&gt;
import express from "express";&lt;br&gt;
import mongoose from "mongoose";&lt;br&gt;
import dotenv from "dotenv";&lt;br&gt;
import taskRoutes from "./routes/taskRoutes.js";&lt;/p&gt;

&lt;p&gt;dotenv.config();&lt;/p&gt;

&lt;p&gt;const app = express();&lt;/p&gt;

&lt;p&gt;app.use(express.json());&lt;br&gt;
app.use("/api/tasks", taskRoutes);&lt;/p&gt;

&lt;p&gt;app.get("/", (req, res) =&amp;gt; {&lt;br&gt;
  res.json({ message: "Welcome to the Task API" });&lt;br&gt;
});&lt;/p&gt;

&lt;p&gt;const PORT = process.env.PORT || 5000;&lt;br&gt;
const MONGODB_URI = process.env.MONGODB_URI;&lt;/p&gt;

&lt;p&gt;mongoose&lt;br&gt;
  .connect(MONGODB_URI)&lt;br&gt;
  .then(() =&amp;gt; {&lt;br&gt;
    console.log("Connected to MongoDB");&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;app.listen(PORT, () =&amp;gt; {
  console.log(`Server running on port ${PORT}`);
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;})&lt;br&gt;
  .catch((error) =&amp;gt; {&lt;br&gt;
    console.error("MongoDB connection failed:", error.message);&lt;br&gt;
    process.exit(1);&lt;br&gt;
  });&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
You have now built a complete Node.js and MongoDB backend from scratch. You learned how to connect to MongoDB Atlas, define a Mongoose schema, create a model, and build a working CRUD API with Express.&lt;br&gt;
This is a strong foundation for building real applications such as blogs, e-commerce platforms, task managers, and SaaS products.&lt;br&gt;
If you found this helpful, follow me for more beginner-friendly Node.js, MongoDB, and backend development tutorials.&lt;/p&gt;

</description>
      <category>node</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>mongodb</category>
    </item>
  </channel>
</rss>
