Ich möchte zwei ODER-Abfragen mit UND in Monoose kombinieren, wie in dieser SQL-Anweisung:
SELECT * FROM ... WHERE (a = 1 OR b = 1) AND (c=1 OR d=1)
Ich habe dies in einem NodeJS-Modul versucht, das nur das Modellobjekt von der Hauptanwendung erhält:
/********** Main application ***********/
var query = MyModel.find({});
myModule1.addCondition(query);
myModule2.addCondition(query);
query.exec(...)
/************ myModule1 ***************/
exports.addCondition = function(query) {
query.or({a: 1}, {b: 1});
}
/************ myModule2 ***************/
exports.addCondition = function(query) {
query.or({c: 1}, {d: 1});
}
Dies funktioniert jedoch nicht. Alle ODER-Bedingungen werden wie in dieser SQL-Anweisung zusammengefügt:
SELECT * FROM ... WHERE a = 1 OR b = 1 OR c=1 OR d=1
Wie kann ich die beiden Bedingungen von myModule1
und myModule2
mit AND in Mongoose kombinieren ?
query.or({a: 1}, {b: 1});
sollte so etwas wiequery.or([{a: 1}, {b: 1}]);
etc. seinAntworten:
Es ist wahrscheinlich am einfachsten, Ihr Abfrageobjekt direkt zu erstellen als:
Sie können aber auch den
Query#and
Helfer verwenden, der in den neuesten 3.x Mongoose-Versionen verfügbar ist:quelle
$and
hier verwenden, da ein Objekt mit demselben Namen (von$or
) nicht zwei Felder enthalten kann .