Node.js Lesson 13: Databases with MongoDB
Most Node.js apps use a database. MongoDB with Mongoose is the most popular choice for Node.js beginners — it stores data as JSON-like documents, familiar to JavaScript developers.
Setup
# Free MongoDB: mongodb.com/atlas (cloud)
# Or install locally: mongodb.com/downloads
npm install mongoose
Connecting and Defining a Schema
const mongoose = require("mongoose");
// Connect
mongoose.connect(process.env.DB_URL)
.then(() => console.log("MongoDB connected"))
.catch(err => console.error("DB Error:", err));
// Schema: defines the shape of documents
const userSchema = new mongoose.Schema({
name: { type: String, required: true, trim: true },
email: { type: String, required: true, unique: true, lowercase: true },
age: { type: Number, min: 0, max: 120 },
role: { type: String, enum: ["user","admin"], default: "user" },
createdAt: { type: Date, default: Date.now }
});
// Model: used to query the database
const User = mongoose.model("User", userSchema);
CRUD Operations
// CREATE
const user = new User({ name: "Alice", email: "alice@example.com" });
await user.save();
// or:
const user2 = await User.create({ name: "Bob", email: "bob@example.com" });
// READ
const all = await User.find();
const one = await User.findById(id);
const filtered = await User.find({ role: "admin" }).limit(10).sort({ name: 1 });
// UPDATE
await User.findByIdAndUpdate(id, { name: "Alice Smith" }, { new: true });
// DELETE
await User.findByIdAndDelete(id);
🏋️ Practice Task
Build a Users API backed by MongoDB. Schema: name (required), email (required, unique), age, bio. CRUD endpoints at /api/users. Add search: GET /api/users?name=alice should search by name (case-insensitive).
💡 Hint: For case-insensitive search: User.find({ name: { $regex: req.query.name, $options: “i” } })