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

Wie führt man eine Mehrfachtextsuche mit $text query und $or in mongodb / mongoose durch?

Dieser tatsächliche Fehler deutet darauf hin, dass Ihre Mongodb eine Version kleiner als 2.6 ist (also keine Textsuche auf diese Weise). Aber das geht aus zwei Gründen sowieso nicht.

  1. Ein $or Ausdruck kann nur einen haben spezieller Indexausdruck, der entweder "Text" oder "Geodaten" in den Argumenten ist.

  2. Sie erwarten Textsuchen in "zwei" verschiedenen Feldern und Sie können nur eines haben Textindex pro Sammlung. Dieser einzelne Index kann jedoch über mehrere Felder im Dokument verteilt werden. Sie können jedoch nicht unterschiedliche Suchbegriffe für unterschiedliche Felder erfragen.

Dokumentation Zitat :

Und es sollte auch sagen "Du kannst $or nicht verwenden mit einem $text Ausdruck oder $near -Operator, wenn beide in mehr als einer Bedingung verwendet werden." Aber diese kleine Information fehlt, aber Sie können es immer noch nicht tun.

Ihre Syntax ist im Allgemeinen nicht korrekt, aber selbst mit der richtigen Syntax in einer unterstützten Version von MongoDB würden Sie einen Fehler erhalten, wenn Sie versuchen, $or zu verwenden so:

Error: error: {
    "$err" : "Can't canonicalize query: BadValue Too many text expressions",
    "code" : 17287
}

Um dies zu beheben, benötigen Sie also:

  1. Um eine MongoDB-Serverversion von 2.6 oder höher zu haben, die den $text unterstützt Syntax ( oder Leben mit Befehlsformen )

  2. Um mit der Indizierung über mehrere Felder und der Verwendung eines einzigen Index zu leben.

  3. Um "separate Abfragen" anstelle Ihrer "oder"-Bedingungen auszuführen und die Ergebnisse in Ihrer Client-API-Schnittstelle zu "kombinieren".

Nur so erhalten Sie bei der MongoDB-Textsuche solche "oder"-Bedingungen.