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));