Estoy buscando a sacar objetos de una base de datos postgres con Sequelize, pero sólo devolver los elementos que tienen un id que no es igual a alguno de los elementos en una matriz dada.

En el Sequelize documentación, hay operadores $ne para not equal y $in para el retorno de los elementos que tienen propiedades con valores que coinciden con la matriz dada, pero no se ve como hay un operador para algo que combina los dos.

Por ejemplo, si tengo artículos en mi base de datos con identificadores de [1, 2, 3, 4, 5, 6], y yo quería para filtrar las que por comparación con otra matriz (es decir,[2,3,4]), por lo que volvería elementos [1, 5, 6]. En mi ejemplo, yo también aleatorizar el orden de restitución y límite, pero que puede ser descartado.

function quizQuestions(req, res) {
  const query = {
    limit: 10,
    order: [ [sequelize.fn('RANDOM')] ],
    where: {
      id: { $ne: [1, 2, 3] } // This does not work
    }
  };

  Question.findAll(query)
  .then(results => res.status(200).json(map(results, r => r.dataValues)))
  .catch(err => res.status(500).json(err));
}

Edit: Con @piotrbienias respuesta, mi consulta se parece a esto:

  const query = {
    limit: 10,
    order: [ [sequelize.fn('RANDOM')] ],
    where: {
      id: { $notIn: [1, 2, 3] }
    }
  };
InformationsquelleAutor Yo Wakita | 2017-03-30

2 Comentarios

  1. 11

    Existe $noen, usted debe haber perdido. Ejemplar de consulta con $notIn genera

    SELECT "id", "name"
    FROM "categories" AS "Category"
    WHERE "Category"."id" NOT IN (1, 2);

    EDITAR

    La documentación a la que te refieres es para 2.0 versión de Sequelize, usted debe actualizar a 3.0.

    • Perfecto, gracias! Yo en realidad no me aviso que estaba leyendo el 2.0 docs cuando he publicado. Estoy usando sequelize 3.30.2, gracias por la ayuda!
  2. 8

    utilizando

    const Op = Sequelize.Op
    where: {
          id: {[Op.notIn]:[1, 2, 3]}
    }

    Ver los operadores:

    Sequelize expone símbolo de operadores que se pueden utilizar para crear más complejo comparaciones

Dejar respuesta

Please enter your comment!
Please enter your name here