Finder方法是一类生成SELECT查询的方法。
默认情况下,所有finder方法执行的结果都是model类的实例(而不仅仅是普通的JavaScript对象)。这意味着,在数据库返回结果后,Sequelize会自动将所有内容包装到适当的实例对象中。在少数情况下,当结果太多时,这种包装可能效率低下。要禁用此包装并接收普通响应,请将{raw:true}作为选项传递给finder方法。
findAll
findAll方法在上一个教程中已经知道。它生成一个标准的SELECT查询,该查询将从表中检索所有条目(除非受到where子句之类的限制)。
findByPk
findByPk方法使用提供的主键从表中只获取一个条目。
const project = await Project.findByPk(123);if (project === null) {console.log('Not found!');} else {console.log(project instanceof Project); // true// Its primary key is 123}
findOne
findOne方法用于获得它找到的第一个条目(如果提供了可选的查询选项,且该条目满足)。
const project = await Project.findOne({ where: { title: 'My Title' } });if (project === null) {console.log('Not found!');} else {console.log(project instanceof Project); // trueconsole.log(project.title); // 'My Title'}
findOrCreate
const [user, created] = await User.findOrCreate({where: { username: 'sdepold' },defaults: {job: 'Technical Lead JavaScript'}});console.log(user.username); // 'sdepold'console.log(user.job); // This may or may not be 'Technical Lead JavaScript'console.log(created); // The boolean indicating whether this instance was just createdif (created) {console.log(user.job); // This will certainly be 'Technical Lead JavaScript'}
findAndCountAll
const { count, rows } = await Project.findAndCountAll({where: {title: {[Op.like]: 'foo%'}},offset: 10,limit: 2});console.log(count);console.log(rows);
