Mor*_*rio 55 node.js sequelize.js
通过创建这样的对象
var condition=
{
where:
{
LastName:"Doe"?
FirstName:["John","Jane"],
Age:{
gt:18
}
}
}
Run Code Online (Sandbox Code Playgroud)
并把它传递进去
Student.findAll(condition)
.success(function(students){
})
Run Code Online (Sandbox Code Playgroud)
它可以像这样精美地生成SQL
"SELECT * FROM Student WHERE LastName='Doe' AND FirstName in ("John","Jane") AND Age>18"
Run Code Online (Sandbox Code Playgroud)
但是,这都是'AND'条件,如何通过创建条件对象来生成'OR'条件?
Mor*_*rio 70
似乎现在有另一种格式
where: {
LastName: "Doe",
$or: [
{
FirstName:
{
$eq: "John"
}
},
{
FirstName:
{
$eq: "Jane"
}
},
{
Age:
{
$gt: 18
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
会产生
WHERE LastName='Doe' AND (FirstName = 'John' OR FirstName = 'Jane' OR Age > 18)
Run Code Online (Sandbox Code Playgroud)
请参阅doc:http://docs.sequelizejs.com/en/latest/docs/querying/#where
小智 28
用途Sequelize.or:
var condition = {
where: Sequelize.and(
{ name: 'a project' },
Sequelize.or(
{ id: [1,2,3] },
{ id: { lt: 10 } }
)
)
};
Run Code Online (Sandbox Code Playgroud)
参考(搜索Sequelize.or)
编辑:此外,这已被修改,对于最新的方法,请参阅Morio的答案,
Cor*_*usK 19
将来不推荐使用基于字符串的运算符(您可能已在控制台中看到警告).
让这个与符号运算符一起工作对我来说非常困惑,我用两个例子更新了文档.
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;
Run Code Online (Sandbox Code Playgroud)
Eva*_*oky 15
这将是:
$or: [{a: 5}, {a: 6}] // (a = 5 OR a = 6)
Run Code Online (Sandbox Code Playgroud)
inm*_*yth 10
对于Sequelize 4
询问
SELECT * FROM Student WHERE LastName='Doe'
AND (FirstName = "John" or FirstName = "Jane") AND Age BETWEEN 18 AND 24
Run Code Online (Sandbox Code Playgroud)
带运算符的语法
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]
}
}
}
));
Run Code Online (Sandbox Code Playgroud)
笔记
$(例如$and,$or...){freezeTableName: true}在表格模型中设置,否则Sequelize将查询其复数形式的名称(学生 - > 学生)在Sequelize版本5中,您也可以使用这种方式(充分利用Operator Sequelize):
var condition =
{
[Op.or]: [
{
LastName: {
[Op.eq]: "Doe"
},
},
{
FirstName: {
[Op.or]: ["John", "Jane"]
}
},
{
Age:{
[Op.gt]: 18
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
然后,您必须包括以下内容:
const Op = require('Sequelize').Op
Run Code Online (Sandbox Code Playgroud)
并传递给:
Student.findAll(condition)
.success(function(students){
//
})
Run Code Online (Sandbox Code Playgroud)
它可以像这样漂亮地生成SQL:
"SELECT * FROM Student WHERE LastName='Doe' OR FirstName in ("John","Jane") OR Age>18"
Run Code Online (Sandbox Code Playgroud)
小智 5
where: {
[Op.or]: [
{
id: {
[Op.in]: recordId,
},
}, {
id: {
[Op.eq]: recordId,
},
},
],
},
Run Code Online (Sandbox Code Playgroud)
这对我有用!
| 归档时间: |
|
| 查看次数: |
77994 次 |
| 最近记录: |