MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongoose:Vollständigen Namen mit Regex abfragen

Trennen Sie den Suchbegriff nach Wörtern und trennen Sie sie mit einem Alternationsoperator ('|').

var terms = req.params.search.split(' ');

var regexString = "";

for (var i = 0; i < terms.length; i++)
{
    regexString += terms[i];
    if (i < terms.length - 1) regexString += '|';
}

var re = new RegExp(regexString, 'ig');

Für die Eingabe 'John Smith' , erstellt dies einen regulären Ausdruck, der wie folgt aussieht:/John|Smith/ig . Dies wird sowohl für einzelne Wörter wahr zurückgeben als auch funktionieren, wenn die Eingabe nur 'John Sm' ist

Sie können herumspielen mit dieser Regex, um eine für Ihre Bedürfnisse besser geeignete zu erhalten.

BEARBEITEN:

Das Problem dabei ist, dass Ihre Namensfelder getrennt sind. In diesem Fall führt die Anwendung derselben Regex auf beide Felder nicht zu den gewünschten Ergebnissen. Die Regex muss auf dasselbe Feld mit dem vollständigen Namen angewendet werden.

Eine mögliche Lösung ist die Verwendung von Aggregation:

User.aggregate()
    .project({fullName: {$concat: ['$firstName', ' ', '$lastName']}})
    .match({fullName: re})