2016-11-06 4 views
0

Ich versuche, die Suche auf meiner Website zu verbessern, das ist, wie es aussieht, zur Zeit (ich benutze NodeJS, Sequelize und PostgreSQL):Sequelize Abfrage mehrmals

db.food.findAll({ 
     where: { 
      nameFood: { 
       $iLike: '%' + queryName + '%' 
      } 
     } 
    }).then(function (foods) { 
     foods.sort(compareFood); 

     res.json(foods); 
    }, function (e) { 
     res.status(500).send(); 
    }); 

Ich denke, es ist ziemlich selbsterklärend ist, aber wenn etwas nicht klar ist, frage mich einfach nach den Kommentaren.

Jetzt berücksichtigt dieser Suchalgorithmus den WHOLE-Parameter, so dass die Suche nach "Hühnereiern" nichts ergeben würde, da sie in meiner Datenbank als "Eier" gespeichert sind.

Meine Idee für eine schnelle Verbesserung wäre es, die Abfrage der Suche nach Räumen spalten und dann jedes Schlüsselwort abfragen, so etwas wie:

var keywords = queryName.split(' '); 

Damit ich die Schlüsselwörter haben, jetzt, wie kann ich eine variable Anzahl abfragen von Zeiten und verbinde das Ergebnis in einem Array, um wie der in Lebensmitteln zurückgegeben werden?

Ich überprüfte die Dokumentation und einige Fragen hier aber konnte nichts finden, jede Hilfe wird geschätzt, vielen Dank.

Antwort

3

Sie können die Eigenschaft $or verwenden, um alles abzufragen, das mit "Eier" oder "Huhn" übereinstimmt.

Hier ist ein Beispiel:

// split queryName by spaces 
var qry = queryName.split(' '); 

// convert each item into a $iLike object 
// ['chicken', 'eggs'] -> [{ $iLike: '%chicken%' }, { $iLike: '%eggs%' }] 
qry = qry.map(function(item) { 
    return { 
    $iLike: '%' + item + '%'; 
    }; 
}); 

db.food.findAll({ 
    where: { 
     nameFood: { $or: qry } 
    } 
}).then(function (foods) { 
    foods.sort(compareFood); 

    res.json(foods); 
}).catch(function (e) { 
    res.status(500).send(); 
}); 

Hoffnung, dass Ihre Frage beantwortet, aber bevor du gehst Ich habe auch einen schönen Tipp für Sie, dass Sie nützlich finden könnten.

Einer von ihnen verwendet die .catch Funktion für den Empfang von Fehlern. Anstatt .then für Ergebnisse und Fehler zu verwenden, können Sie .then für die Behandlung der Ergebnisse und .catch zur Behandlung der Fehler verlassen.

db.food.findAll() 
    .then(function(results) { 

    }) 
    .catch(function(err) { 

    }); 

statt

db.food.findAll() 
    .then(function(results) { 

    }, function(err) { 

    }); 
+0

Vielen Dank Kumpel :) – leofontes

Verwandte Themen