通过创建像这样的对象
var condition=
{
where:
{
LastName:"Doe",
FirstName:["John","Jane"],
Age:{
gt:18
}
}
}
并将其传递给
Student.findAll(condition)
.success(function(students){
})
它可以像这样精美地生成SQL
"SELECT * FROM Student WHERE LastName='Doe' AND FirstName in ("John","Jane") AND Age>18"
然而,这都是'AND'条件,如何通过创建条件对象来生成'OR'条件?
答案 0 :(得分:57)
现在似乎还有另一种格式
where: {
LastName: "Doe",
$or: [
{
FirstName:
{
$eq: "John"
}
},
{
FirstName:
{
$eq: "Jane"
}
},
{
Age:
{
$gt: 18
}
}
]
}
将生成
WHERE LastName='Doe' AND (FirstName = 'John' OR FirstName = 'Jane' OR Age > 18)
请参阅文档:http://docs.sequelizejs.com/en/latest/docs/querying/#where
答案 1 :(得分:25)
使用Sequelize.or
:
var condition = {
where: Sequelize.and(
{ name: 'a project' },
Sequelize.or(
{ id: [1,2,3] },
{ id: { lt: 10 } }
)
)
};
Reference(搜索Sequelize.or
)
编辑:此外,这已被修改,对于最新方法,请参阅Morio's answer,
答案 2 :(得分:13)
答案 3 :(得分:12)
将来不推荐使用基于字符串的运算符(您可能已在控制台中看到警告)。
让这个与符号运算符一起使用对我来说非常混乱,我用两个例子更新了docs。
Post.findAll({
where: {
[Op.or]: [{authorId: 12}, {authorId: 13}]
}
});
// SELECT * FROM post WHERE authorId = 12 OR authorId = 13;
Post.findAll({
where: {
authorId: {
[Op.or]: [12, 13]
}
}
});
// SELECT * FROM post WHERE authorId = 12 OR authorId = 13;
答案 4 :(得分:8)
对于Sequelize 4
查询
SELECT * FROM Student WHERE LastName='Doe'
AND (FirstName = "John" or FirstName = "Jane") AND Age BETWEEN 18 AND 24
的语法
const Op = require('Sequelize').Op;
var r = await to (Student.findAll(
{
where: {
LastName: "Doe",
FirstName: {
[Op.or]: ["John", "Jane"]
},
Age: {
// [Op.gt]: 18
[Op.between]: [18, 24]
}
}
}
));
注释
$
(例如$and
,$or
...){freezeTableName: true}
,否则Sequelize将查询其复数形式的名称(学生 - > 学生)答案 5 :(得分:0)
在Sequelize版本5中,您也可以使用这种方式(完全使用Operator Sequelize):
var condition =
{
[Op.or]: [
{
LastName: {
[Op.eq]: "Doe"
},
},
{
FirstName: {
[Op.or]: ["John", "Jane"]
}
},
{
Age:{
[Op.gt]: 18
}
}
]
}
然后,您必须包括以下内容:
const Op = require('Sequelize').Op
并将其传递给:
Student.findAll(condition)
.success(function(students){
//
})
它可以像这样精美地生成SQL:
"SELECT * FROM Student WHERE LastName='Doe' OR FirstName in ("John","Jane") OR Age>18"