NodeJS的sequelize操作数据库(五)

739 阅读2分钟

这是我参与11月更文挑战的第19天,活动详情查看:2021最后一次更文挑战

UPDATE 查询

Update 接受 where子句参数,就像上面的读取查询一样.

// 修改姓名更改为 "李华"
await User.update({ name: "李华" }, {
  where: {
    name: 李小龙
  }
});

DELETE 查询

Delete 接受 where 子句参数,就像上面的读取查询一样.

// 删除所有名为 "Jane" 的人 
await User.destroy({
  where: {
    name: "李华"
  }
});

要销毁所有内容,可以使用 TRUNCATE

// 截断表格
await User.destroy({
  truncate: true
});

批量创建

Model.bulkCreate 方法, 一次查询创建多个记录.

以数组对象作为数据源头,Model.bulkCreate 的用法与 Model.create 相似

const userList = await Captain.bulkCreate([
  { name: '张三' },
  { name: '李四' }
]);
console.log(userList.length); // 2
console.log(userList[0].name); // '张三'

但是,默认情况下,bulkCreate 不会在要创建的每个对象上运行验证(而 create 可以做到). 想让 bulkCreate 也运行验证,必须设置validate: true 参数. 但这会降低性能.

const User = sequelize.define('user', {
  bar: {
    type: DataTypes.TEXT,
    validate: {
      len: [4, 6]
    }
  }
});

// 这不会引发错误,两个实例都将被创建
await FUseroo.bulkCreate([
  { name: '张三' },
  { name: '名字太过长测试' }
]);

// 这将引发错误,不会创建任何内容
await User.bulkCreate([
  { name: '张三' },
  { name: '名字太过长测试' }
], { validate: true });

直接从用户获取值,限制实际插入的列可能会有所帮助. 为了做到这一点,bulkCreate() 接受一个 fields 参数,该参数须为你要定义字段的数组(其余字段将被忽略).

await User.bulkCreate([
  { username: '张三' },
  { username: '李四', age: 60 }
], { fields: ['username'] });

实用方法

count 方法仅计算数据库中元素出现的次数.

console.log(`这有 ${await Project.count()} 个项目`);

const amount = await Project.count({
  where: {
    id: {
      [Op.gt]: 25
    }
  }
});
console.log(`这有 ${amount} 个项目 id 大于 25`);

maxmin 和 sum的便捷方法

await User.max('age'); // 40
await User.max('age', { where: { age: { [Op.lt]: 20 } } }); // 10
await User.min('age'); // 5
await User.min('age', { where: { age: { [Op.gt]: 5 } } }); // 10
await User.sum('age'); // 55
await User.sum('age', { where: { age: { [Op.gt]: 5 } } }); // 50