从入门到精通,Egg.js 查询:花样查询学起来!
2023-10-01 09:48:27
Egg.js 查询:
1. 基础查询
- find()
:查询所有记录。
- findById()
:根据 ID 查询记录。
- findOne()
:查询一条记录。
- count()
:统计记录数量。
- min()
:获取最小值。
- max()
:获取最大值。
- sum()
:获取总和。
- avg()
:获取平均值。
2. 高级查询
- where()
:条件查询。
- orWhere()
:或条件查询。
- andWhere()
:与条件查询。
- orderBy()
:排序。
- limit()
:限制查询结果数量。
- offset()
:跳过指定数量的查询结果。
- select()
:选择要查询的字段。
- distinct()
:去除重复记录。
- join()
:关联查询。
3. ** 复杂查询举例:**
const users = await ctx.model.User.findAll({ where: { age: { [Sequelize.Op.gt]: 18, [Sequelize.Op.lt]: 30 }, gender: 'male' }, order: [['age', 'DESC']], limit: 10, offset: 20 });
此查询将返回年龄在18到30岁之间的男性用户,按年龄降序排列,跳过前20条记录,只返回10条记录。
4. 查找不存在则创建
- findOrCreate()
:检查数据库中是否已存在某个元素。如果是这种情况,则该方法将生成相应的实体。否则,它将创建一个新的实体。
- 该方法返回一个数组,第一个元素是实体,第二个元素是一个布尔值,指示实体是否已存在。
- 如果实体已存在,则布尔值为 true
;否则,布尔值为 false
。
```
const [user, created] = await ctx.model.User.findOrCreate({
where: {
name: 'John Doe'
}
});
```
**此查询将检查数据库中是否存在名为“John Doe”的用户。如果是这种情况,则该方法将返回现有用户。否则,它将创建一个新的用户并返回该用户。**
**created 变量将包含一个布尔值,指示用户是否已存在。**
5. 注意:
- findOrCreate()
方法仅适用于具有主键的模型。
- 如果模型没有主键,则该方法将引发错误。