web-dev-qa-db-ja.com

node.js sequelize:複数の「where」クエリ条件

複数の条件でテーブルをクエリするにはどうすればよいですか?両方が機能する例を以下に示します。

Post.findAll({ where: ['deletedAt IS NULL'] }).success()

そして

Post.findAll({ where: {topicId: req.params.id} }).success()

次に、条件を組み合わせる必要がある場合は、次のようなことをする必要があるように感じます

Post.findAll({ where: [{topicId: req.params.id}, 'deletedAt IS NULL'] }).success()

、しかしそれは動作しません。
sequelizeが待機する構文は何ですか?

ノードのデバッグは言う:

デバッグ:TypeError:オブジェクト#にはメソッド 'replace'がありません

それが重要なら...

18
Masquer

この投稿とsequelizeの最新バージョンの時点では、上記の回答は古くなっています。私は誰かを時間を節約することを期待して働いた解決策を投稿しています。

filters["State"] = {$and: [filters["State"], {$not: this.filterSBM()}] };

JSONオブジェクト内の$と配列に注意してください。トークンの交換。

または、より一般的な方法で記述します。これは、誰かが頭を包むのに役立つ可能性があるためです。

{ $and: [{"Key1": "Value1"}, {"Key2": "Value2"}] }
4
JR Smith

できるよ:

Post.findAll({ where: {deletedAt: null, topicId: req.params.id} })

deletedAt IS NULLに翻訳されます

ところで、deletedAt NOT IS NULLが必要な場合は、次を使用します。

Post.findAll({ where: {deletedAt: {$ne: null}, topicId: req.params.id} })
21
gwae

ただやる:

Post.findAll(
    { where: ["topicId = ? AND deletedAt IS NULL", req.params.id] }
).success()

または、またはクエリが必要ですか?

11
sdepold

新バージョンでこれを試してください

Post.findAll({
  where: {
    authorId: 12,
    status: 'active'
  }
}).then(function (data) {
    res.status(200).json(data)
            })
   .catch(function (error) {
                res.status(500).json(error)
   });;
3
Adiii