默認情況下,所有 finder 方法的結果都是模型類的實例(與普通的 JavaScript 對象相反). 這意味著在數據庫返回結果之后,Sequelize 會自動將所有內容包裝在適當的實例對象中. 在少數情況下,當結果太多時,這種包裝可能會效率低下. 要禁用此包裝并收到簡單的響應,請將 { raw: true } 作為參數傳遞給 finder 方法.
1、findAll
它生成一個標準的 SELECT 查詢,該查詢將從表中檢索所有條目(除非受到 where 子句的限制).
2贱傀、findByPk
findByPk
方法使用提供的主鍵從表中僅獲得一個條目伊脓。
const project = await Project.findByPk(123);
if (project === null) {
console.log('Not found!');
} else {
console.log(project instanceof Project); // true
// 它的主鍵是 123
}
3、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'
}
4纯蛾、findOrCreate
除非找到一個滿足查詢參數的結果,否則方法 findOrCreate
將在表中創(chuàng)建一個條目. 在這兩種情況下,它將返回一個實例(找到的實例或創(chuàng)建的實例)和一個布爾值,指示該實例是已創(chuàng)建還是已經存在.
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); // 指示此實例是否剛剛創(chuàng)建的布爾值
if (created) {
console.log(user.job); // 這里肯定是 'Technical Lead JavaScript'
}
5翻诉、findAndCountAll
findAndCountAll
方法是結合了 findAll
和 count
的便捷方法捌刮。 在處理與分頁有關的查詢時非常有用剑令,在分頁中拄查,你想檢索帶有 limit
和 offset
的數據,但又需要知道與查詢匹配的記錄總數碍脏。
findAndCountAll
方法返回一個具有兩個屬性的對象:
const { count, rows } = await Project.findAndCountAll({
where: {
title: {
[Op.like]: 'foo%'
}
},
offset: 10,
limit: 2
});
console.log(count);
console.log(rows);