Skip to content
Share
Explore

Mongoose and Express CRUD Operations Highlights Reel

# Mongoose and Express CRUD Operations Highlights Reel
## 1. CREATE (Insert) Operation
```javascript // Define the schema const bookSchema = new mongoose.Schema({ title: String, author: { type: mongoose.Schema.Types.ObjectId, ref: 'Author' }, publishedYear: Number });
// Create the model const Book = mongoose.model('Book', bookSchema);
// Express route for creating a new book app.post('/api/books', async (req, res) => { const book = new Book({ title: req.body.title, author: req.body.authorId, publishedYear: req.body.publishedYear });
try { const newBook = await book.save(); res.status(201).json(newBook); } catch (err) { res.status(400).json({ message: err.message }); } }); ```
Key Points: - Mongoose schema defines the structure of the document - `new Book(...)` creates a new document instance - `book.save()` inserts the document into the MongoDB collection
## 2. READ Operations
### Read All ```javascript app.get('/api/books', async (req, res) => { try { const books = await Book.find().populate('author'); res.json(books); } catch (err) { res.status(500).json({ message: err.message }); } }); ```
### Read One ```javascript app.get('/api/books/:id', async (req, res) => { try { const book = await Book.findById(req.params.id).populate('author'); if (!book) return res.status(404).json({ message: 'Book not found' }); res.json(book); } catch (err) { res.status(500).json({ message: err.message }); } }); ```
Key Points: - `Book.find()` retrieves all documents - `Book.findById()` retrieves a single document by its ID - `.populate('author')` replaces the author ID with the full author document
## 3. UPDATE Operation
```javascript app.patch('/api/books/:id', async (req, res) => { try { const book = await Book.findById(req.params.id); if (!book) return res.status(404).json({ message: 'Book not found' }); if (req.body.title) book.title = req.body.title; if (req.body.authorId) book.author = req.body.authorId; if (req.body.publishedYear) book.publishedYear = req.body.publishedYear;
const updatedBook = await book.save(); res.json(updatedBook); } catch (err) { res.status(400).json({ message: err.message }); } }); ```
Key Points: - `Book.findById()` first retrieves the document - Update only the fields that are provided in the request - `book.save()` saves the updated document back to the database
## 4. DELETE Operation
```javascript app.delete('/api/books/:id', async (req, res) => { try { const book = await Book.findById(req.params.id); if (!book) return res.status(404).json({ message: 'Book not found' }); await book.remove(); res.json({ message: 'Book deleted' }); } catch (err) { res.status(500).json({ message: err.message }); } }); ```
Key Points: - `Book.findById()` first retrieves the document - `book.remove()` deletes the document from the database
## Summary
- Mongoose provides a schema-based solution to model your application data - Express routes handle HTTP requests and delegate database operations to Mongoose - Mongoose methods like `save()`, `find()`, `findById()`, and `remove()` map to CRUD operations - Async/await is used to handle asynchronous database operations - Error handling is crucial in each operation to provide proper feedback
Want to print your doc?
This is not the way.
Try clicking the ··· in the right corner or using a keyboard shortcut (
CtrlP
) instead.