教程 > sequelize 中文教程 > 阅读:131

sequelize 模型查询(查找器 finder)——迹忆客-ag捕鱼王app官网

finder 方法是生成 select 查询的方法。

默认情况下,所有 finder 方法的结果都是模型类的实例(与普通的 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
  // 它的主键是 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); // true
  console.log(project.title); // 'my title'
}

findorcreate

除非找到一个满足查询参数的结果,否则方法 findorcreate 将在表中创建一个条目。 在这两种情况下,它将返回一个实例(找到的实例或创建的实例)和一个布尔值,指示该实例是已创建还是已经存在。

使用 where 参数来查找条目,而使用 defaults 参数来定义必须创建的内容。 如果 defaults 不包含每一列的值,则 sequelize 将采用 where 的值(如果存在)。

假设我们有一个空的数据库,该数据库具有一个 user 模型,该模型具有一个 username 和一个 job.

const [user, created] = await user.findorcreate({
  where: { username: 'sdepold' },
  defaults: {
    job: 'technical lead javascript'
  }
});
console.log(user.username); // 'sdepold'
console.log(user.job); // 这可能是也可能不是 'technical lead javascript'
console.log(created); // 指示此实例是否刚刚创建的布尔值
if (created) {
  console.log(user.job); // 这里肯定是 'technical lead javascript'
}

findandcountall

findandcountall 方法是结合了 findall 和 count 的便捷方法。 在处理与分页有关的查询时非常有用,在分页中,你想检索带有 limitoffset 的数据,但又需要知道与查询匹配的记录总数。

当没有提供 group 时, findandcountall 方法返回一个具有两个属性的对象:

  • count - 一个整数 - 与查询匹配的记录总数
  • rows - 一个数组对象 - 获得的记录

当提供了 group 时, findandcountall 方法返回一个具有两个属性的对象:

  • count - 一个数组对象 - 包含每组中的合计和预设属性
  • rows - 一个数组对象 - 获得的记录
const { count, rows } = await project.findandcountall({
  where: {
    title: {
      [op.like]: 'foo%'
    }
  },
  offset: 10,
  limit: 2
});
console.log(count);
console.log(rows);

查看笔记

扫码一下
查看教程更方便
网站地图