Mediante la creación de objetos como este

var condition=
{
  where:
  {
     LastName:"Doe"
     FirstName:["John","Jane"],
     Age:{
       gt:18
     }
  }    
}

y pasar en

Student.findAll(condition)
.success(function(students){

})

Podría bellamente generar SQL como este

"SELECT * FROM Student WHERE LastName='Doe' AND FirstName in ("John","Jane") AND Age>18"

Sin embargo, es todo ‘Y’ condición, ¿cómo podría generar ‘O’ la condición por la que se crea una condición de objeto?

  • he visto 3 maneras o el operador se utiliza… where: { $or : [ {attr:val}, {attr:val}] } , where : { $or : { attr:val, attr2:val} } , where: { attr: { $or: [val, val] } }
InformationsquelleAutor Morio | 2013-12-20

6 Comentarios

  1. 67

    Parece que hay otro formato ahora

    where: {
        LastName: "Doe",
        $or: [
            {
                FirstName: 
                {
                    $eq: "John"
                }
            }, 
            {
                FirstName: 
                {
                    $eq: "Jane"
                }
            }, 
            {
                Age: 
                {
                    $gt: 18
                }
            }
        ]
    }

    Generará

    WHERE LastName='Doe' AND (FirstName = 'John' OR FirstName = 'Jane' OR Age > 18)

    Ver el doc: http://docs.sequelizejs.com/en/latest/docs/querying/#where

    • Este debe ser $or: { ... }. Nota, el [ y ] debe convertirse en { y }
    • Ambos están incorrectos, ver mi respuesta para el derecho de la sintaxis.
    • Yo prefiero esta antes de la y/o funcional de la forma @evanhadfield sugieren, ya que es más limpio.
    • ¿cómo puedo hacer el siguiente en sequelize? …donde (a o B) y (C o D)
  2. 28

    Uso Sequelize.or:

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

    Referencia (búsqueda de Sequelize.or)

    Edit: También, esto ha sido modificado y para el último método ver Morio la respuesta,

    • este enlace no funciona
    • por favor, revise la actualización de la respuesta.
  3. 14

    Cadena de los operadores que será obsoleta en el futuro (Usted probablemente ha visto la advertencia en la consola).

    Conseguir que el trabajo con la simbólica de los operadores era muy confuso para mí, y he actualizado el docs con dos ejemplos.

    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;
    • he visto 3 o el operador se utiliza… ` donde: { $o : [ {attr:val}, {attr:val}] } ` , ` donde : { $o : { attr:val, attr2:val} } ` , ` donde: { p: { $o: [val, val] } } `
  4. 9

    Para Sequelize 4

    Consulta

    SELECT * FROM Student WHERE LastName='Doe' 
    AND (FirstName = "John" or FirstName = "Jane") AND Age BETWEEN 18 AND 24 

    Sintaxis con Los operadores

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

    Notas

    • Para mejor seguridad Sequelize recomienda la eliminación de alias operadores $ (e.g $and, $or …)
    • A menos que usted tenga {freezeTableName: true} establecido en el modelo de mesa, a continuación, Sequelize se consulta en contra de la forma plural del nombre ( Alumno -> Estudiantes )
  5. 5

    En Sequelize la versión 5 puede también puede utilizar esta forma (uso completo del Operador Sequelize) :

    var condition = 
    { 
      [Op.or]: [ 
       { 
         LastName: {
          [Op.eq]: "Doe"
          },
        },
       { 
         FirstName: {
          [Op.or]: ["John", "Jane"]
          }
       },
       {
          Age:{
            [Op.gt]: 18
          }
        }
     ]
    }

    Y, a continuación, debe incluir este :

    const Op = require('Sequelize').Op

    y que se apruebe en :

    Student.findAll(condition)
    .success(function(students){ 
    //
    })

    Podría bellamente generar SQL como este :

    "SELECT * FROM Student WHERE LastName='Doe' OR FirstName in ("John","Jane") OR Age>18"

Dejar respuesta

Please enter your comment!
Please enter your name here