我正在尝试使用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?如果任何一个陈述是正确的,我需要停止注册过程。
感谢您的帮助
答案 0 :(得分:1)
您应该使用Op.or
运算符,该运算符将检查username
或email
是否存在:
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 });
}
});