Ich versuche, diese SQL-Abfrage in MongoDB zu replizieren:MongoDB - Finden Sie Benutzer nach Namen oder Nachnamen oder Vornamen + Namen
SELECT * FROM users WHERE
name LIKE CONCAT('%', :search_txt, '%') OR
surname LIKE CONCAT('%', :search_txt, '%') OR
CONCAT(name, ' ', surname) LIKE CONCAT('%', :search_txt, '%')
Bisher habe ich nach dem Namen oder Namen mit diesem Code suchen verwaltet, aber ich kann ‚t herauszufinden, wie auch die Suche nach Namen + Nachnamen
User.find(
{
"$or": [
{"name" : new RegExp(req.body.term, 'i')},
{"surname" : new RegExp(req.body.term, 'i')}
]
}
Dank
Funktioniert die SQL-Abfrage, wenn Namen als Nachname + Name eingegeben werden? Funktioniert es, wenn zwischen zwei Namen zwei Leerzeichen stehen? –
@Alex Blex Ich habe es nur so geschrieben, um es so einfach wie möglich zu machen, in dem ursprünglichen Projekt, in dem ich es benutzte, hatte ich auch einen anderen OR, um den Fall Nachname + Name abzudecken. – Nite
Die bessere Option hier ist, die Zeichenfolge zu "teilen" und die Argumente an $ oder als separate Wörter zu senden. Regex-Übereinstimmungen oder Verkettungen erfordern einen "vollständigen Sammlungs-Scan", aber das Bereitstellen von "exakten Übereinstimmungs" -Begriffen ist nicht und ist daher um Größenordnungen schneller. Außerdem sollten Sie die Groß-/Kleinschreibung normalisieren oder Groß- und Kleinschreibung beachten, wenn Ihre MongoDB dies unterstützt. Vermeiden Sie Groß- und Kleinschreibung bei regulären Ausdrücken oder berechneten Ausdrücken, wenn Sie die Antwortzeit der Abfrage auf ein Minimum beschränken möchten. –