2012-05-29 10 views
15

Wie kann ich eine Tabelle mit mehreren Bedingungen abfragen? Hier sind die Beispiele beide arbeiten:node.js sequelize: mehrere "where" -Abfragebedingungen

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

und

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

Dann, wenn ich Bedingungen kombiniert brauchen, ich glaube, wie ich so etwas wie

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

tun müssen, aber es funktioniert nicht.
Auf welche Syntax wartet die Sequelize?

Knoten Debug sagt:

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

wenn es darauf ankommt ...

Antwort

3

Bitte beachten Sie, dass dieser Beitrag und die neueste Version von Sequelize, die obigen Antworten sind veraltet. Ich schreibe die Lösung, die ich arbeite, in der Hoffnung, jemanden Zeit zu sparen.

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

Beachten Sie die $ und Array innerhalb des JSON-Objekts und das Fehlen von? Token-Ersatz

Oder in allgemeinerer Art und Weise setzen, denn das könnte um es jemand wickelt den Kopf helfen:

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

Just do:

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

Oder benötigen Sie ein oder abfragen?

+0

Sein und dass ich brauchte, und Ihre Lösung passt perfekt zu meinen Bedürfnissen, also danke. – Masquer

+0

Ich muss sagen, es ist offensichtlich, was Sie dort getan haben, wie konnte ich das nicht selbst gemacht haben?) Aber es fühlt sich eher wie Workaround an, ich bin immer noch neugierig, was ich tun würde, wenn beide Bedingungen Parameter hätten? Oder wenn es mehr Bedingungen geben würde? Sequelize Handbücher haben nichts in solchen Fällen ... – Masquer

+0

Nvm, ich habe gerade herausgefunden, dass es mehrere Parameter geben kann, die anschließend für '?' S bereitgestellt werden. Nochmals vielen Dank) – Masquer

20

Sie tun können:

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

Welche BTW deletedAt IS NULL

übersetzt werden würde, wenn Sie deletedAt NOT IS NULL benötigen, verwenden Sie:

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

Bitte aktualisieren Sie Ihre Antwort, um mehrere zu überprüfen wo, zeigen nur eine Bedingung, wo er Nummer und Null überprüfen muss. –

0

In neuen Version versuchen

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