Den faktiske fejl antyder, at din mongodb er en version mindre end 2.6 (så ingen tekstsøgning på den måde). Men du kan ikke gøre det alligevel af to grunde.
-
En
$or
udtryk kan kun have én særligt indeksudtryk, der enten er "tekst" eller "geospatial" i argumenterne. -
Du forventer tekstsøgninger på "to" forskellige felter, og du kan kun have et tekstindeks pr. samling. Det enkelte indeks kan dog spredes over flere felter i dokumentet. Men du kan ikke spørge om forskellige søgeord for forskellige felter.
Dokumentation citat :
Og der skulle også stå "Du kan ikke bruge $or
med en $text
udtryk eller $near
operator, hvor begge bruges i mere end én tilstand." Men det lille stykke information mangler, men du kan stadig ikke gøre det.
Din syntaks er generelt ikke korrekt, men selv med den korrekte syntaks i en understøttet version af MongoDB vil du få en fejl ved at prøve at bruge $or
sådan her:
Error: error: {
"$err" : "Can't canonicalize query: BadValue Too many text expressions",
"code" : 17287
}
Så for at løse dette har du brug for:
-
At have en MongoDB-serverversion af 2.6 eller nyere, der understøtter
$text
syntaks (eller leve med kommandoformer) -
At leve med at indeksere over flere felter og bruge et enkelt indeks.
-
At udføre "separate forespørgsler" i stedet for dine "eller"-betingelser og "kombinere" resultaterne i din klient-API-grænseflade.
Det er den eneste måde, du får "eller"-betingelser som denne med MongoDB-tekstsøgning.