web-dev-qa-db-ja.com

Sequelize.js:配列外のクエリ(配列内のアイテムの$ ne)

私はSequelizeを使用してpostgresデータベースからアイテムをプルしようとしていますが、指定された配列のどのアイテムとも等しくないIDを持つアイテムのみを返します。

Sequelizeのドキュメント には、$neの演算子not equalと、指定された配列に一致する値を持つプロパティを持つアイテムを返す$inがありますが、それらを組み合わせたものの演算子はないようです二。

たとえば、データベースに[1, 2, 3, 4, 5, 6]というIDの項目があり、それらを別の配列(つまり、[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] }
    }
  };
7
Yo Wakita

$notIn が存在します。見逃しているはずです。 $notInを使用したクエリの例

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

[〜#〜]編集[〜#〜]

あなたが参照するドキュメントはSequelizeの2.0バージョン用であり、3.0に更新する必要があります。

11
piotrbienias

使用する

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

演算子 を参照してください:

Sequelizeは、より複雑な比較を作成するために使用できるシンボル演算子を公開します

15
Derit Agustin