使用OR条件查询FindOrCreate函数

时间:2014-03-03 12:43:57

标签: node.js passport.js sequelize.js

我正在尝试使用NodeJs& amp;创建一个登录/注册系统。 Sequelize。当我从用户那里获取发布数据时,我想做一个FindOrCreate查询,但是包含OR的查询。

db.User.findOrCreate({ 
      username : desiredUsername,
      email: emailAddress
    })

执行查询:

SELECT * FROM `users` WHERE `users`.`username`='username' AND `users`.`email`='emailaddress' LIMIT 1;

如何将AND部分更改为OR?如果任何一个陈述是正确的,我需要停止注册过程。

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

您应该使用Op.or运算符,该运算符将检查usernameemail是否存在:

const Op = require('Sequelize').Op

User.findOrCreate({
  where: { [Op.or]: [{username: desiredUsername}, {email: emailAddress}] },
  defaults: {firstName, lastName}
})
.then(arr => {
  // the first element is the user
  const user = arr[0]
  // the second element tells us if the user was newly created
  const wasCreated = arr[1]

  // do something with the user data
}

Sequelize文档中的语法运算符参考: http://docs.sequelizejs.com/manual/tutorial/querying.html#operators

答案 1 :(得分:0)

似乎您需要将其分解为单独的查找和创建操作:

db.User.find({
    where: Sequelize.or({ username: desiredUsername }, { email: emailAddress })
}).success(function (user) {
    if (!user) {
        db.User.create({ username: desiredUsername, email: emailAddress });
    }
});