2012-05-29 1 views
15

Come faccio a interrogare una tabella con più condizioni? Ecco gli esempi sia di lavoro:node.js sequelize: più condizioni di query 'where'

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

e

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

Quindi, se ho bisogno di condizioni combinate, mi sento come ho bisogno di fare qualcosa di simile

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

, ma non funziona
Qual è la sintassi attesa per il sequelize?

nodo di debug dice:

DEBUG: TypeError: Object # has no method 'replace'

se è importante ...

risposta

3

Si prega di notare che a partire da questo intervento e il la versione più recente di sequelize, le risposte di cui sopra non sono aggiornate. Sto postando la soluzione che ho lavorato nella speranza di salvare qualcuno qualche volta.

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

Nota $ e l'array all'interno dell'oggetto JSON e la mancanza di? sostituzione del token.

O mettere in modo più generale, dal momento che potrebbe aiutare qualcuno avvolgere la testa intorno ad esso:

{ $and: [{"Key1": "Value1"}, {"Key2": "Value2"}] } 
8

Basta fare:

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

o hai bisogno di una o di ricerca?

+0

La sua e che avevo bisogno, e la tua soluzione si adatta perfettamente alle mie esigenze, quindi grazie. – Masquer

+0

Devo dire che è ovvio che cosa hai fatto lì, come potrei non averlo fatto io?) Ma sembra più una soluzione, sono ancora curioso di sapere cosa farei se entrambe le condizioni avessero parametri? O se ci fossero più condizioni? Sequelize manuali non ha nulla in questi casi ... – Masquer

+0

Nvm, ho appena scoperto che ci possono essere diversi parametri forniti successivamente per '?' S. Grazie ancora) – Masquer

20

Si può fare:

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

che sarebbe tradotto in deletedAt IS NULL

A proposito, se avete bisogno di deletedAt NOT IS NULL, uso:

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

Si prega di aggiornare la risposta per controllare più dove, mostrare sono solo mostrando una condizione in cui ha bisogno di controllare il numero e null. –

0

In nuova versione provare questo

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