【问题标题】:Sequelize.js: Query for not in array ($ne for items in array)Sequelize.js:查询不在数组中($ne 用于数组中的项目)
【发布时间】:2017-08-24 20:30:25
【问题描述】:

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

Sequelize documentation 中,有$ne 用于not equal$in 的运算符用于返回具有与给定数组匹配的值的属性的项目,但看起来没有用于某事的运算符结合了这两者。

例如,如果我的数据库中有 ID 为 [1, 2, 3, 4, 5, 6] 的项目,并且我想通过与另一个数组(即 [2,3,4])进行比较来过滤这些项目,以便它返回项目 [1, 5, 6]。在我的示例中,我还随机化了退货顺序和限制,但这可以忽略。

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

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

  const query = {
    limit: 10,
    order: [ [sequelize.fn('RANDOM')] ],
    where: {
      id: { $notIn: [1, 2, 3] }
    }
  };

【问题讨论】:

    标签: postgresql sequelize.js


    【解决方案1】:

    使用

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

    operators:

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

    【讨论】:

      【解决方案2】:

      $notIn,你一定错过了。 $notIn 的示例查询生成

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

      编辑

      你参考的文档是2.0版本的Sequelize,你应该更新到3.0

      【讨论】:

      • 完美,谢谢!我实际上没有注意到我在发布时正在阅读 2.0 文档。我正在使用 sequelize 3.30.2,感谢您的帮助!
      猜你喜欢
      • 2020-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-10
      • 2019-01-31
      • 1970-01-01
      • 2016-06-18
      相关资源
      最近更新 更多