CRUD operations let you create, read, update, and delete data in a database easily. Sequelize helps you do this in Node.js apps without writing raw SQL.
CRUD operations with Sequelize in Express
Start learning this pattern below
Jump into concepts and practice - no test required
const Model = require('./models/Model');
// Create
Model.create({ field1: value1, field2: value2 });
// Read
Model.findAll();
Model.findOne({ where: { field: value } });
// Update
Model.update({ fieldToUpdate: newValue }, { where: { id: someId } });
// Delete
Model.destroy({ where: { id: someId } });Use create() to add new data.
Use findAll() or findOne() to get data.
Use update() to change existing data.
Use destroy() to remove data.
User.create({ name: 'Alice', age: 25 });User.findAll();
User.update({ age: 26 }, { where: { name: 'Alice' } });User.destroy({ where: { name: 'Alice' } });This Express app uses Sequelize to manage users in a database. It supports creating, reading, updating, and deleting users through HTTP routes.
Try sending JSON data to POST /users to add a user, GET /users to list users, PUT /users/:id to update, and DELETE /users/:id to remove.
import express from 'express'; import { Sequelize, DataTypes } from 'sequelize'; const app = express(); app.use(express.json()); const sequelize = new Sequelize('sqlite::memory:'); const User = sequelize.define('User', { name: { type: DataTypes.STRING, allowNull: false }, age: { type: DataTypes.INTEGER } }); app.post('/users', async (req, res) => { const user = await User.create(req.body); res.json(user); }); app.get('/users', async (req, res) => { const users = await User.findAll(); res.json(users); }); app.put('/users/:id', async (req, res) => { const { id } = req.params; await User.update(req.body, { where: { id } }); const updatedUser = await User.findOne({ where: { id } }); res.json(updatedUser); }); app.delete('/users/:id', async (req, res) => { const { id } = req.params; await User.destroy({ where: { id } }); res.json({ message: 'User deleted' }); }); (async () => { await sequelize.sync({ force: true }); app.listen(3000, () => console.log('Server running on http://localhost:3000')); })();
Always handle errors in real apps to avoid crashes.
Sequelize uses promises, so use async/await for cleaner code.
Use sequelize.sync() to create tables automatically.
CRUD means Create, Read, Update, Delete data.
Sequelize lets you do CRUD with JavaScript instead of SQL.
Use Sequelize methods like create(), findAll(), update(), and destroy().
Practice
Solution
Step 1: Understand CRUD operations
CRUD stands for Create, Read, Update, Delete. Each operation has a matching Sequelize method.Step 2: Match method to Create operation
Thecreate()method is used to add new records to the database.Final Answer:
create()-> Option CQuick Check:
Create =create()[OK]
- Confusing create() with findAll() which reads data
- Using update() to add new records
- Using destroy() which deletes records
Solution
Step 1: Recall Sequelize update syntax
The update method takes two arguments: the new values object, and the options object with a where clause.Step 2: Match correct argument order and structure
User.update({ name: 'Alice' }, { where: { id: 5 } }) correctly places the new values first and the where condition second.Final Answer:
User.update({ name: 'Alice' }, { where: { id: 5 } }) -> Option AQuick Check:
update(values, { where }) = User.update({ name: 'Alice' }, { where: { id: 5 } }) [OK]
- Swapping the order of arguments
- Passing values inside where instead of separate object
- Using strings instead of objects for values
const users = await User.findAll({ where: { age: { [Op.gt]: 18 } } });
console.log(users.length);What will
console.log(users.length) output?Solution
Step 1: Understand findAll with where clause
The findAll method returns all records matching the where condition. Here, it filters users with age greater than 18.Step 2: Determine what users.length represents
users is an array of matching records, so users.length is the count of users older than 18.Final Answer:
The number of users older than 18 -> Option DQuick Check:
findAll with condition returns matching array length [OK]
- Thinking findAll returns undefined or null
- Ignoring the where condition filtering
- Assuming Op.gt is undefined without importing
await User.destroy(id);
Solution
Step 1: Recall destroy method signature
Sequelize's destroy method expects an options object with a where property to specify which records to delete.Step 2: Identify incorrect argument usage
Passing just the id directly is incorrect; it must be inside { where: { id: id } }.Final Answer:
destroy requires an object with a where clause, not just id -> Option AQuick Check:
destroy({ where: { id } }) is correct [OK]
- Passing id directly instead of inside where
- Not awaiting asynchronous destroy call
- Expecting destroy to accept callback
Solution
Step 1: Understand update method parameters
The first argument is the values to update, the second is an options object with a where clause to filter records.Step 2: Check correct use of Op.lt and date object
User.update({ status: 'active' }, { where: { lastLogin: { [Op.lt]: new Date('2023-01-01') } } }) correctly uses[Op.lt]with a Date object inside the where clause.Step 3: Verify argument order and structure
The other options have incorrect argument order or missing where wrapper.Final Answer:
User.update({ status: 'active' }, { where: { lastLogin: { [Op.lt]: new Date('2023-01-01') } } }) -> Option BQuick Check:
update(values, { where: condition }) with Op.lt date [OK]
- Swapping values and where arguments
- Using string instead of Date object for date comparison
- Omitting where wrapper around condition
