Ten rzeczywisty błąd sugeruje, że mongodb jest w wersji niższej niż 2.6 (więc nie można wyszukiwać tekstu w ten sposób). Ale i tak nie możesz tego zrobić z dwóch powodów.
-
$or
wyrażenie może mieć tylko jeden specjalne wyrażenie indeksowe, będące argumentami „tekstowymi” lub „geoprzestrzennymi”. -
Spodziewasz się wyszukiwania tekstowego w „dwóch” różnych polach i możesz mieć tylko jedno indeks tekstowy na kolekcję. Jednak ten pojedynczy indeks może być rozłożony na kilka pól w dokumencie. Ale nie możesz zadawać różnych wyszukiwanych haseł w różnych polach.
Dokumentacja cytat :
Powinno też być napisane „Nie możesz użyć $or
z $text
wyrażenie lub $near
operator, w którym oba są używane w więcej niż jednym warunku." Brakuje jednak tej małej informacji, ale nadal nie możesz tego zrobić.
Twoja składnia jest generalnie niepoprawna, ale nawet przy poprawnej składni w obsługiwanej wersji MongoDB otrzymasz błąd przy próbie użycia $or
tak:
Error: error: {
"$err" : "Can't canonicalize query: BadValue Too many text expressions",
"code" : 17287
}
Aby rozwiązać ten problem, potrzebujesz:
-
Aby mieć serwer MongoDB w wersji 2.6 lub nowszej, który obsługuje
$text
składnia ( lub żyć z formularzami poleceń ) -
Żyć z indeksowaniem wielu pól i używaniem jednego indeksu.
-
Aby wykonać "oddzielne zapytania" zamiast warunków "lub" i "połączyć" wyniki w interfejsie API klienta.
Tylko w ten sposób można uzyskać takie warunki „lub” za pomocą wyszukiwania tekstowego MongoDB.