nodejs学习四:sequelize model的常用方法

文档地址: 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: { includes: [[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; // 数据开始位置,页码减一乘以每页显示数目
  models.User.findAndCountAll({
    offset: Number(offset),
    limit: Number(size),
    distinct: true,
    order: [["createdAt", "desc"]], // 以createdAt字段倒叙
  })

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
  })
})
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mosowe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值