nodejs学习四:sequelize model的常用方法
程序员文章站
2023-12-22 20:13:28
...
文档地址: https://sequelize.org/master/class/lib/model.js~Model.html
create
向表中插入一条数据,返回一个promise
// 向users表插入一条数据,此处post方法
let {name,idCard,age,email} = req.body;
let user = await models.User.create({
name,
idCard,
age,
email
})
findAll
我用get方法
查找全部数据,
// 查找users表全部数据
let user = await models.User.findAll()
where 指定筛选条件
// 查找users表数据name
let {name} = req.query;
let user = await models.User.findAll({
where: {
name
}
})
where的其他条件查询:
// 查找users表数据name
const op = models.Sequelize.Op;
let {age} = req.query;
let user = await models.User.findAll({
where: {
age: {
[op.between]: [0, 24] // 查询年龄在0-24岁的
}
}
})
attributes
// 查找users表数据name
let user = await models.User.findAll({
attributes: ['age','name'], // 要返回的部分属性字段,此处查询后只返回age,name字段
})
- 指定查询(返回)的字段
attributes: ['age','name']
- 通过嵌套数组重命名
attributes: ['name',['age', 'num']],
, age将会重命名为num输出 - 聚合:返回总数并以count输出,及部分字段如age:
attributes: ['age',[models.sequelize.fn('COUNT', models.sequelize.col('name')), 'count']]
, - 列出所有属性并添加聚合:
attributes: { include: [[models.sequelize.fn('COUNT', models.sequelize.col('name')), 'count']] }
, 返回所有字段并返回总条数,这里报错,需调试 - 删除一些属性字段后返回:
attributes: { exclude: ['age'] }
, age字段将不会被返回
翻页与条数
let {page, limit} = req.query;
let offset = (page-1)*limit; // 数据开始位置,页码减一乘以每页显示数目
let user = await models.User.findAll({
offset: Number(offset),
limit: Number(limit)
})
倒序
let {page, limit} = req.query;
let offset = (page-1)*limit; // 数据开始位置,页码减一乘以每页显示数目
let user = await models.User.findAll({
offset: Number(offset),
limit: Number(limit)
})
user.rows.reverse() // rows是查询出来自带的字段,数组类型
findAndCountAll
查询并汇集总数,返回count和rows
findOne
查询当前数据中的一条数据,返回一条数据
findOrCreate
查询数据,如果数据不存在就创建数据
max、min
查询最大值、最小值
models.User.min('age')
update
更新数据(此处我使用PUT)
router.put('/update', async (req, res) => {
let {name,age,email,id} = req.body;
let user = await models.User.findOne({ // 先找数据
where: {
id
}
})
if (user) {
user.update({ // 找到再更新
name,
age,
email
})
} else {
res.json({
message: '没找到'
})
}
res.json({
message: 'ok',
user
})
})
简化:
router.put('/update', async (req, res) => {
let {name,age,email,id} = req.body;
let user = await models.User.update({
name,
age,
email
},{
where: {
id
}
})
if (!user) {
res.json({
message: '没找到'
})
return
}
res.json({
message: 'ok',
user
})
})
upsert
更新或新增一行,创建模型时需定义主键或唯一键,唯一索引必须在后缀模型中定义,而不仅仅是在表中。否则,您可能会遇到唯一的约束冲突,因为Sequelize无法识别应该更新的行。
let {name,age,email,id} = req.body;
let user = await models.User.upsert({
id,
name,
age,
email
})
destroy
删除数据(delete方法)
router.delete('/delete/:id', async (req, res) => {
let {id} = req.params;
let user = await models.User.destroy({
where: {
id
}
})
res.json({
message: 'ok',
user
})
})