官方:?https://demopark.github.io/sequelize-docs-Zh-CN/
1:查詢
1.1?findById?
根據(jù)id查詢數(shù)據(jù) 返回一個對象
users =await user.findById(0)
1.2?findOne
按照屬性查找 是匹配到的第一個 userName 為 '測試用戶1'
users =await user.findOne({where: {userName:'測試用戶1'}})
對查找出來的結(jié)果進(jìn)行過濾 意思是 只返回這兩個字段 也可以改別名
users =await user.findOne({
where: {userName:'測試用戶5'},
attributes: ['id', 'passWard']
})
條件查詢 Op.or 代表的是或的意思 Op.gt 大于?
查詢userName為測試用戶并且id等于1或者2或者大于4
const Sequelize =require('Sequelize')
users =await user.findOne({
where: {
passWard:'12345',
? ? [Sequelize.Op.or]: [
????????{id: [1, 2]},
? ? ? {id: {[Sequelize.Op.gt]:4}}
]}
})
1.3??findOrCreate
查找這個對象,若有竹观,將之返回 否則 插入默認(rèn)的值
返回一個數(shù)組急迂,數(shù)組中有兩個值制圈,第一個為查找或插入的對象码倦,第二個值為Boolean true 插入的 false 查詢出來的
users =await user.findOrCreate({
where: {userName:'測試用戶5'},
defaults: {userName:'sdepold' + count, passWard:'12345'}
})
1.4?findAndCountAll
查找多個對象 分頁使用 返回一個對象 對象中存放兩個參數(shù) count: 匹配的總數(shù) rows: 匹配的分頁的數(shù)據(jù)
users =await user.findAndCountAll({
where: {userName:'測試用戶5'},
? offset:10,
? limit:2
})
1.5?findAll址儒、all
返回一個數(shù)組
users =await user.findAll()
users =await user.all()
1.6?count捕发、max庙楚、min 、 sum
分別代表 總數(shù)哎壳、最大值毅待、最小值、總數(shù)
users =await user.count()
users =await user.max('id')?
總結(jié):這些方法都可以傳參數(shù)归榕,參數(shù)是一個對象尸红,用于過濾數(shù)據(jù)的條件
過濾條件:{
where: {
? key: value,
?id: {[Op.or]: [12,13]} // Op.or?Sequelize內(nèi)置的操作符 這個意思是查詢id為12或者13的實體刹泄。外里。感覺不如直接寫sql
},
attributes: [‘id', 'name' ]? //? 一個數(shù)組循签,用于過濾查詢出來的屬性逢唤。勤哗。 意思是只查詢id和name這兩個屬性
}
操作符:只是一部分
const Op = Sequelize.Op
[Op.and]: {a:5}// 且 (a = 5)
[Op.or]: [{a:5}, {a:6}]// (a = 5 或 a = 6)
[Op.gt]:6,? ? ? ? ? ? ? ? // id > 6
[Op.gte]:6,? ? ? ? ? ? ? // id >= 6
[Op.lt]:10,? ? ? ? ? ? ? // id < 10
[Op.lte]:10,? ? ? ? ? ? ? // id <= 10
[Op.ne]:20,? ? ? ? ? ? ? // id != 20
[Op.eq]:3,? ? ? ? ? ? ? ? // = 3
[Op.not]:true,? ? ? ? ? ? // 不是 TRUE
[Op.between]: [6, 10],? ? // 在 6 和 10 之間
[Op.notBetween]: [11, 15], // 不在 11 和 15 之間
2:新增
create? 插入數(shù)據(jù)
let users =await user.create({userName:'測試用戶' + count, passWard:'12345'})
3:更新
update 更新數(shù)據(jù)?返回一個數(shù)組 里面存放的是是否成功
users =await user.update({
passWard:'654321'
}, {
where: {
userName:'測試用戶11'
? }
})
2:原始查詢
sequelize.query():執(zhí)行原始sql查詢
sequelize.query(sql, [options={}]) -> Promise
默認(rèn)情況下呐馆,返回值中有兩個參數(shù):一個包含結(jié)果的數(shù)組斯议,一個元數(shù)據(jù)對象∑虻可以通過.spread方法來查看結(jié)果贼穆。
如果不想使用原始查詢結(jié)果,可以第二個可選參數(shù)中傳一個type參數(shù)兰粉,并指定查詢的類型故痊。設(shè)置后,sequelize會對結(jié)果進(jìn)行格式化:
sequelize.query('SELECT...').spread(function (results, metadata) {
});
sequelize.query('SELECT...', { type: sequelize.QueryTypes.SELECT }).then(function (results) {
})
參數(shù)介紹
sql:sql語句
options.raw:Boolean值?設(shè)置為true時玖姑,sequelize 不會查詢結(jié)果進(jìn)行格式化愕秫,或不會根據(jù)結(jié)果構(gòu)建實例
options.transaction=null:Transaction為查詢指定事務(wù)
options.type='RAW':執(zhí)行的查詢類型,sequelize會根據(jù)這個類型對返回結(jié)果格式化焰络〈魉Γ可以設(shè)置為一個字符串,或是通過Sequelize.QueryTypes來設(shè)
????????????????????????????????????置
options.nest=false:設(shè)置為true闪彼,會使用dottie.js庫甜孤,轉(zhuǎn)換通過.設(shè)置的對象層級關(guān)系。如:{ 'user.username': 'john' }?會被轉(zhuǎn)換為
????????????????????????????????????{ user: { username: 'john' }}。設(shè)置true后缴川,查詢類型如未明確指定茉稠,則使用'SELECT'
options.bind:$param格式綁定參數(shù)的對象,或未命令綁定參數(shù)數(shù)組把夸,會替換SQL中的$1, $2, ...
直接看例子:
let users = await?sequelize.query(
`select img_url,unique_id from items where deleted = 0 and show_vote = 1 and project_unique_id = $project_unique_id`,
{bind: project_unique_id: bodyParams.project_unique_id} //?project_unique_id的值是可變的而线,查詢時,這個值將替換$project_unique_id這個值
)
options.model:model類型?用于sequelize 模型扎即,用于從查詢結(jié)果中構(gòu)建實例
options.fieldMap:當(dāng)為?SELECT查詢時吞获,映射字段與屬性名