Рассмотим базовые операции с данными на примере модели из прошлой темы:
const Sequelize = require("sequelize"); const sequelize = new Sequelize({ dialect: "sqlite", storage: "metanit.db", define: { timestamps: false } }); const User = sequelize.define("user", { id: { type: Sequelize.INTEGER, autoIncrement: true, primaryKey: true, allowNull: false }, name: { type: Sequelize.STRING, allowNull: false }, age: { type: Sequelize.INTEGER, allowNull: false } });
Для добавления данных в бд у модели вызывается метод create(), в который передается добавляемый объект:
User.create({ name: "Tom", age: 35 }).then(res=>{ console.log(res); }).catch(err=>console.log(err));
Как мы видим, свойства передаваемого в метод create объекта соответствуют свойствам модели User за исключением свойства id, которое генерируется базой данных.
После операции добавления мы можем получить добавленный объект, в том числе его id, сгенерированный базой данных:
User.create({ name: "Bob", age: 31 }).then(res=>{ const user = {id: res.id, name: res.name, age: res.age} console.log(user); }).catch(err=>console.log(err));
Для извлечения всех данных применяется метод findAll():
User.findAll({raw:true}).then(users=>{ console.log(users); }).catch(err=>console.log(err));
В данном случае в метод передается необязательный объект {raw:true}
, который позволяет получить непосредственно данны из БД в вид объектов
без дополнительных метаданных. Например, консольный вывод в моем случае выглядел следующим образом:
[ { id: 1, name: 'Tom', age: 35 }, { id: 2, name: 'Bob', age: 31 } ]
Для применения фильтрации при получении данных (а также при обновлении и удалении) применяется оператор where, который указывает на критерий фильтрации. Например, выберем из БД всех пользователей, у которых name="Tom":
User.findAll({where:{name: "Tom"}, raw: true }) .then(users=>{ console.log(users); }).catch(err=>console.log(err));
Консольный вывод в данном случае:
[ { id: 1, name: 'Tom', age: 35 }]
Нередко необходимо получить лишь один объект из БД. В этом случае мы можем использовать такие методы как findByPk() (получает объект по первичному ключу) и findOne() (получает один объект по определенному критерию). Например, получим пользователя с id=2:
User.findByPk(2) .then(user=>{ if(!user) return; // если пользователь не найден console.log(user.name); }).catch(err=>console.log(err));
Или получим одного пользователя с именем Tom:
User.findOne({where: {name: "Tom"}}) .then(user=>{ if(!user) return; console.log(user.name, user.age); }).catch(err=>console.log(err));
Для обновления применяется метод update(), в который передается объект с новыми значениями и объект-критерий выборки обновляемых объектов:
User.update({ age: 36 }, { where: { name: "Bob" } }).then((res) => { console.log(res); });
В данном случае первый объект указывает, что все обновляемые объекты будут получать для поля age значение 36. Второй объект указывает на критерий выборки - обновляются только объекты, у которых name="Bob".
Для удаления используется метод destroy(), в который передается объект-критерий выборки удаляемых объектов:
User.destroy({ where: { name: "Bob" } }).then((res) => { console.log(res); });
В данном случае удаляются объекты, у которых name="Bob".