Sequelize OR条件对象

时间:2013-12-20 01:56:40

标签: node.js sequelize.js

通过创建像这样的对象

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'条件?

6 个答案:

答案 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)

请参阅docs about querying

这将是:

$or: [{a: 5}, {a: 6}]  // (a = 5 OR a = 6)

答案 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 

Operators

的语法
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]
    }
  }
}
));

注释

  • 对于better security Sequelize建议删除别名运算符$(例如$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"
相关问题