私は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] }
}
};
$notIn
が存在します。見逃しているはずです。 $notIn
を使用したクエリの例
SELECT "id", "name"
FROM "categories" AS "Category"
WHERE "Category"."id" NOT IN (1, 2);
[〜#〜]編集[〜#〜]
あなたが参照するドキュメントはSequelizeの2.0
バージョン用であり、3.0
に更新する必要があります。
使用する
const Op = Sequelize.Op
where: {
id: {[Op.notIn]:[1, 2, 3]}
}
演算子 を参照してください:
Sequelizeは、より複雑な比較を作成するために使用できるシンボル演算子を公開します