欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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字段
  })
  1. 指定查询(返回)的字段attributes: ['age','name']
  2. 通过嵌套数组重命名 attributes: ['name',['age', 'num']],, age将会重命名为num输出
  3. 聚合:返回总数并以count输出,及部分字段如age:attributes: ['age',[models.sequelize.fn('COUNT', models.sequelize.col('name')), 'count']],
  4. 列出所有属性并添加聚合: attributes: { include: [[models.sequelize.fn('COUNT', models.sequelize.col('name')), 'count']] }, 返回所有字段并返回总条数,这里报错,需调试
  5. 删除一些属性字段后返回: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
  })
})

上一篇:

下一篇: