Der folgende Code funktioniert mit keine Querystrings oder ein nur Querstring. Mit anderen Worten, wenn Sie einfach zu /characters
gehen, werden alle Zeichen zurückgegeben. Wenn Sie jedoch einen Querystring-Parameter /characters?gender=male
angeben, werden nur männliche Zeichen zurückgegeben.Wie erstellt man eine bedingte Abfrage in Mongoose?
Wie konnte ich erweitern diese mit arbeiten entweder , , oder keine querystrings? Ich würde wirklich lieber vermeiden zu schreiben 8 oder 9 verschiedene if-Anweisungen für jeden Fall. Ich hatte gehofft, Mongoose würde einfach ignorieren $ Klausel, wenn es null
oder undefined
ist, aber das ist nicht der Fall (siehe Code auskommentiert).
var gender = req.query.gender;
var race = req.query.race;
var bloodline = req.query.bloodline;
var query = Character.find();
if (gender)
query = query.where('gender').equals(gender);
if (race)
query = query.where('race').equals(race);
if (bloodline)
query = query.where('bloodline').equals(bloodline);
/*
query
.where('gender').equals(new RegExp('^' + gender + '$', 'i'))
.where('race').equals(new RegExp('^' + race + '$', 'i'))
.where('bloodline').equals(new RegExp('^' + bloodline + '$', 'i'));
*/
query.exec(function(err, characters) {
if (err) throw err;
res.send(characters);
});
Edit: Nun, ich denke ich es jetzt mit 7 if-Anweisungen tun könnte. Es sei denn jemand findet eine elegantere Lösung.
Edit 2:
Danke Jungs. Es ist schwierig, eine Antwort auszuwählen, weil Sie beide mir geholfen haben, diese prägnante Lösung zu finden. Hier ist das Ganze jetzt.
var conditions = {};
for (var key in req.query) {
if (req.query.hasOwnProperty(key)) {
conditions[key] = new RegExp('^' + req.query[key] + '$', 'i');
}
}
var query = Character.find(conditions);
query.exec(function(err, characters) {
if (err) throw err;
res.send({ characters: characters });
});
Kein Problem, aber Sie sollten eine Antwort für zukünftige Benutzer auswählen, um zu wissen, welche Ihnen mehr geholfen hat. Wenn Sie nicht können, denken Sie darüber nach, Ihre eigene Antwort zu schreiben und diese als richtig zu prüfen. – cschaeffler
Sie sollten Ihre Edit 2 entfernen und Ihre eigene Antwort schreiben, das ist toll btw –
Sehr schön - funktioniert super; außer für den Hygieneteil mit der RegEx, der ungerade Abfragen erzeugt. – nottinhill