Sequelize.js:查询不在数组中($ ne表示数组中的项)

时间:2017-03-30 18:39:40

标签: postgresql sequelize.js

我希望使用Sequelize从postgres数据库中提取项目,但只返回ID与给定数组中的任何项目不相等的项目。

Sequelize documentation中,$nenot equal的运算符$in用于返回具有与给定数组匹配的值的属性的项,但它没有&#39} ;看起来有一个运算符可以将这两者结合起来。

例如,如果我的数据库中包含ids [1, 2, 3, 4, 5, 6]的项目,并且我想通过与另一个数组(即[2,3,4])进行比较来过滤这些项目,那么它将返回项目{ {1}}。在我的例子中,我也随机化了退货订单和限价,但这可以忽略不计。

[1, 5, 6]

编辑:使用@piotrbienias回答,我的查询如下所示:

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

2 个答案:

答案 0 :(得分:9)

存在$notIn,你一定错过了它。 y.isin(['nan', '0', '']) # list contains whatever you want to be evaluated as null 的示例性查询生成

$notIn

修改

您引用的文档适用于Sequelize的SELECT "id", "name" FROM "categories" AS "Category" WHERE "Category"."id" NOT IN (1, 2); 版本,您应该更新为2.0

答案 1 :(得分:6)

使用

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

请参阅operators

  

Sequelize公开了可用于创建更复杂比较的符号运算符