通过创建这样的对象
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'条件?
似乎现在有另一种格式
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)
请参阅doc:http://docs.sequelizejs.com/en/latest/docs/querying/#where
用途Sequelize.or
:
var condition = { where: Sequelize.and( { name: 'a project' }, Sequelize.or( { id: [1,2,3] }, { id: { lt: 10 } } ) ) };
参考(搜索Sequelize.or
)
编辑:此外,这已被修改,对于最新的方法,请参阅Morio的答案,
将来不推荐使用基于字符串的运算符(您可能已在控制台中看到警告).
让这个与符号运算符一起工作对我来说非常困惑,我用两个例子更新了文档.
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;
对于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] } } } ));
笔记
为了更好的安全性 Sequelize建议下探别名运营商$
(例如$and
,$or
...)
除非您已{freezeTableName: true}
在表格模型中设置,否则Sequelize将查询其复数形式的名称(学生 - > 学生)
请参阅有关查询的文档.
这将是:
$or: [{a: 5}, {a: 6}] // (a = 5 OR a = 6)
在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"