Sequelize.or returns 限制1而不是or结果
Sequelize.or returns Limit 1 rather than or result
我正在使用 SequelizeJS(MySql) 和 Passportjs 进行身份验证
当我写
User.find(db.Sequelize.or({ 'username': username }, { 'email': req.body.email }) )
.then((user) => {console.log(user)}
或
User.find({$or:[({ 'username': username }, { 'email': req.body.email })]} )
生成
Executing (default): SELECT id
, name
, username
, email
, password
, Picture
, role
, Description
, joinedAt
, Social
, createdAt
, updatedAt
FROM Users
AS User
LIMIT 1;
我不明白发生了什么,我正在使用 or 并且它生成限制为 1 的查询!
我的用户模型
const bcrypt = require('bcrypt-node');
const db = require('../Config/db');
module.exports = function () {
let DataType = db.Sequelize;
let User = db.sequelize.define('User', {
name: { type: DataType.STRING, allowNull: false },
username: { type: DataType.STRING, unique: true, allowNull: false },
email: { type: DataType.STRING, unique: true, allowNull: false, validate: { isEmail: true } },
password: {
type: DataType.STRING, allowNull: false, set: function (pass) {
let newPassword = bcrypt.hashSync(pass);
this.setDataValue('password', newPassword);
}
},
Picture: { type: DataType.STRING, default: '#' },
role: { type: DataType.STRING, default: 'user',allowNull: false },
Description: { type: DataType.TEXT },
joinedAt: { type: DataType.DATE, defaultValue: DataType.NOW },
Social: { type: DataType.TEXT }
}, {
classMethods: {
associate: function (models) {
User.hasMany(models.Post);
}
}
}, {
instanceMethods: {
comparePassword: function (password) {
return bcrypt.compareSync(password, this.password);
}
}
});
return User;
}
Sequelize 中没有函数 Model.find()
,因此看起来您可能正在调用 Model.findOne()
which applies the LIMIT 1
to your query. To find all of the results, you need to use Model.findAll()
。
您应该使用 query operator $or,但它需要位于具有 OR 值数组的 where
元素内。请参阅下面的示例。
User.findAll({
where: {
$or: [
username: username,
email: req.body.email,
],
}
})
.then(users => console.log(users));
我正在使用 SequelizeJS(MySql) 和 Passportjs 进行身份验证 当我写
User.find(db.Sequelize.or({ 'username': username }, { 'email': req.body.email }) )
.then((user) => {console.log(user)}
或
User.find({$or:[({ 'username': username }, { 'email': req.body.email })]} )
生成
Executing (default): SELECT
id
,name
,username
,password
,Picture
,role
,Description
,joinedAt
,Social
,createdAt
,updatedAt
FROMUsers
ASUser
LIMIT 1;
我不明白发生了什么,我正在使用 or 并且它生成限制为 1 的查询!
我的用户模型
const bcrypt = require('bcrypt-node');
const db = require('../Config/db');
module.exports = function () {
let DataType = db.Sequelize;
let User = db.sequelize.define('User', {
name: { type: DataType.STRING, allowNull: false },
username: { type: DataType.STRING, unique: true, allowNull: false },
email: { type: DataType.STRING, unique: true, allowNull: false, validate: { isEmail: true } },
password: {
type: DataType.STRING, allowNull: false, set: function (pass) {
let newPassword = bcrypt.hashSync(pass);
this.setDataValue('password', newPassword);
}
},
Picture: { type: DataType.STRING, default: '#' },
role: { type: DataType.STRING, default: 'user',allowNull: false },
Description: { type: DataType.TEXT },
joinedAt: { type: DataType.DATE, defaultValue: DataType.NOW },
Social: { type: DataType.TEXT }
}, {
classMethods: {
associate: function (models) {
User.hasMany(models.Post);
}
}
}, {
instanceMethods: {
comparePassword: function (password) {
return bcrypt.compareSync(password, this.password);
}
}
});
return User;
}
Sequelize 中没有函数 Model.find()
,因此看起来您可能正在调用 Model.findOne()
which applies the LIMIT 1
to your query. To find all of the results, you need to use Model.findAll()
。
您应该使用 query operator $or,但它需要位于具有 OR 值数组的 where
元素内。请参阅下面的示例。
User.findAll({
where: {
$or: [
username: username,
email: req.body.email,
],
}
})
.then(users => console.log(users));