Finder方法是一类生成SELECT查询的方法。

默认情况下,所有finder方法执行的结果都是model类的实例(而不仅仅是普通的JavaScript对象)。这意味着,在数据库返回结果后,Sequelize会自动将所有内容包装到适当的实例对象中。在少数情况下,当结果太多时,这种包装可能效率低下。要禁用此包装并接收普通响应,请将{raw:true}作为选项传递给finder方法。

findAll

findAll方法在上一个教程中已经知道。它生成一个标准的SELECT查询,该查询将从表中检索所有条目(除非受到where子句之类的限制)。

findByPk

findByPk方法使用提供的主键从表中只获取一个条目。

  1. const project = await Project.findByPk(123);
  2. if (project === null) {
  3. console.log('Not found!');
  4. } else {
  5. console.log(project instanceof Project); // true
  6. // Its primary key is 123
  7. }

findOne

findOne方法用于获得它找到的第一个条目(如果提供了可选的查询选项,且该条目满足)。

  1. const project = await Project.findOne({ where: { title: 'My Title' } });
  2. if (project === null) {
  3. console.log('Not found!');
  4. } else {
  5. console.log(project instanceof Project); // true
  6. console.log(project.title); // 'My Title'
  7. }

findOrCreate

  1. const [user, created] = await User.findOrCreate({
  2. where: { username: 'sdepold' },
  3. defaults: {
  4. job: 'Technical Lead JavaScript'
  5. }
  6. });
  7. console.log(user.username); // 'sdepold'
  8. console.log(user.job); // This may or may not be 'Technical Lead JavaScript'
  9. console.log(created); // The boolean indicating whether this instance was just created
  10. if (created) {
  11. console.log(user.job); // This will certainly be 'Technical Lead JavaScript'
  12. }

findAndCountAll

  1. const { count, rows } = await Project.findAndCountAll({
  2. where: {
  3. title: {
  4. [Op.like]: 'foo%'
  5. }
  6. },
  7. offset: 10,
  8. limit: 2
  9. });
  10. console.log(count);
  11. console.log(rows);