Sequelize OR条件对象

 手机用户2602925995 发布于 2023-02-09 08:40

通过创建这样的对象

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 个回答
  • 似乎现在有另一种格式

    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

    2023-02-09 08:42 回答
  • 用途Sequelize.or:

    var condition = {
      where: Sequelize.and(
        { name: 'a project' },
        Sequelize.or(
          { id: [1,2,3] },
          { id: { lt: 10 } }
        )
      )
    };
    

    参考(搜索Sequelize.or)

    编辑:此外,这已被修改,对于最新的方法,请参阅Morio的答案,

    2023-02-09 08:43 回答
  • 将来不推荐使用基于字符串的运算符(您可能已在控制台中看到警告).

    让这个与符号运算符一起工作对我来说非常困惑,我用两个例子更新了文档.

    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;
    

    2023-02-09 08:43 回答
  • 对于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将查询其复数形式的名称(学生 - > 学生)

    2023-02-09 08:46 回答
  • 请参阅有关查询的文档.

    这将是:

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

    2023-02-09 08:46 回答
  • 在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"
    

    2023-02-09 08:49 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有