在上一篇文章當中都是針對單條數據的操作,那么本文主要介紹的內容都是基於查詢進行的,可以進行查詢多個,強調幾點,關於使用 Sequelize 連接 MySQL 相關部分的代碼這里就不在貼出來了,主要就是貼出相關核心代碼,方便參閱。
查詢多條數據
let users = await User.findAll();
console.log(users);
經過對查詢的結果發現,查詢的內容不太的閱讀,我們使用到的其實就是 dataValues 當中的內容,其它的部分字段你自行需要使用自行獲取即可,這里方便參閱我這里就直接利用 map 進行過濾重新進行打印一下如下:
let users = await User.findAll();
console.log(users.map(u => u.dataValues));
查詢指定列數據
改造之后可以很方便的進行對比數據,那么這里就還存在一個問題,就是以后我們如果只想要指定的一些字段那么該如何進行過濾呢,當然 findAll
當中是提供了對應的參數的,可以在第一個參數當中傳入一個對象,然后在該對象當中指定 attributes
屬性來確定需要查詢的字段信息即可:
let users = await User.findAll({
attributes: ['name', 'age']
});
console.log(users.map(u => u.dataValues));
條件查詢
這個條件查詢和前面的查詢差不多就是在 findAll 當中傳入一個對象參數,在該對象當中指定查詢關鍵字例如如下的一個簡單查詢:
let user = await User.findAll({
where: {
id: 1
}
});
console.log(user.map(u => u.dataValues));
但是呢,博主發現,如上指定的查詢條件都是等於的情況,那么 MySQL 當中有那么多的條件運算符,我們該如何進行指定呢,當然呢是有的,官方地址:https://sequelize.org/v5/variable/index.html#static-variable-Op
博主這里就只是演示一下其中的部分,關於其它的都是參考博主給的這個栗子進行使用即可。
查詢大於等於指定值的數據
let user = await User.findAll({
where: {
age: {
[Sequelize.Op.gte]: 33
}
}
});
console.log(user.map(u => u.dataValues));
如上的代碼呢,博主是將 id 給去掉了的,那么如何我們將 id 不去掉那么查詢的結果又會是怎樣呢,如下:
let user = await User.findAll({
where: {
age: {
[Sequelize.Op.gte]: 33
},
id: 1
}
});
console.log(user.map(u => u.dataValues));
通過查詢發現,是 AND 的關系,也就是並且的關系,那么我們如果想要指定 OR 的關系那么該如何進行指定呢,這個相比 AND 較為復雜,如下:
let user = await User.findAll({
where: {
[Sequelize.Op.or]: {
age: 33,
id: 3
}
}
});
console.log(user.map(u => u.dataValues));