Indem Sie ein solches Objekt erstellen
var condition=
{
where:
{
LastName:"Doe",
FirstName:["John","Jane"],
Age:{
gt:18
}
}
}
und gib es weiter
Student.findAll(condition)
.success(function(students){
})
Es könnte so wunderbar SQL generieren
"SELECT * FROM Student WHERE LastName='Doe' AND FirstName in ("John","Jane") AND Age>18"
Es ist jedoch alles eine UND-Bedingung. Wie kann ich eine ODER-Bedingung generieren, indem ich ein Bedingungsobjekt erstelle?
node.js
sequelize.js
Morio
quelle
quelle
where: { $or : [ {attr:val}, {attr:val}] }
,where : { $or : { attr:val, attr2:val} }
,where: { attr: { $or: [val, val] } }
Antworten:
Es scheint, dass es jetzt ein anderes Format gibt
where: { LastName: "Doe", $or: [ { FirstName: { $eq: "John" } }, { FirstName: { $eq: "Jane" } }, { Age: { $gt: 18 } } ] }
Wird generieren
WHERE LastName='Doe' AND (FirstName = 'John' OR FirstName = 'Jane' OR Age > 18)
Siehe das Dokument: http://docs.sequelizejs.com/en/latest/docs/querying/#where
quelle
$or: { ... }
. Beachten Sie, dass[
und]
sollte{
und}
[Op.or]
jetzt von sequelizeconst { Op } = require('sequelize')
anstelle von$or
als Schlüssel für sequelize 5+. Sie haben sie in Symbole geändert.String-basierte Operatoren werden in Zukunft veraltet sein (Sie haben wahrscheinlich die Warnung in der Konsole gesehen).
Es war für mich ziemlich verwirrend, dies mit symbolischen Operatoren zum Laufen zu bringen, und ich habe die Dokumente mit zwei Beispielen aktualisiert .
Post.findAll({ where: { [Op.or]: [{authorId: 12}, {authorId: 13}] } }); // SELECT * FROM post WHERE authorId = 12 OR authorId = 13; Post.findAll({ where: { authorId: { [Op.or]: [12, 13] } } }); // SELECT * FROM post WHERE authorId = 12 OR authorId = 13;
quelle
Verwendung
Sequelize.or
:var condition = { where: Sequelize.and( { name: 'a project' }, Sequelize.or( { id: [1,2,3] }, { id: { lt: 10 } } ) ) };
Referenz (Suche nach
Sequelize.or
)Bearbeiten: Auch dies wurde geändert und für die neueste Methode siehe Morios Antwort ,
quelle
Weitere Informationen zum Abfragen finden Sie in den Dokumenten .
Es wäre:
$or: [{a: 5}, {a: 6}] // (a = 5 OR a = 6)
quelle
Für Sequelize 4
Abfrage
SELECT * FROM Student WHERE LastName='Doe' AND (FirstName = "John" or FirstName = "Jane") AND Age BETWEEN 18 AND 24
Syntax mit Operatoren
const Op = require('Sequelize').Op; var r = await to (Student.findAll( { where: { LastName: "Doe", FirstName: { [Op.or]: ["John", "Jane"] }, Age: { // [Op.gt]: 18 [Op.between]: [18, 24] } } } ));
Anmerkungen
$
(zB$and
,$or
...){freezeTableName: true}
im Tabellenmodell festgelegt haben, fragt Sequelize nach der Pluralform seines Namens (Student -> Students ).quelle
In Sequelize Version 5 können Sie möglicherweise auch diese Methode verwenden (Operator Sequelize vollständig verwenden):
var condition = { [Op.or]: [ { LastName: { [Op.eq]: "Doe" }, }, { FirstName: { [Op.or]: ["John", "Jane"] } }, { Age:{ [Op.gt]: 18 } } ] }
Und dann müssen Sie Folgendes einschließen:
const Op = require('Sequelize').Op
und gib es weiter:
Student.findAll(condition) .success(function(students){ // })
Es könnte SQL wie folgt wunderbar erzeugen:
"SELECT * FROM Student WHERE LastName='Doe' OR FirstName in ("John","Jane") OR Age>18"
quelle