MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak wykonać wyszukiwanie wielu tekstów za pomocą zapytania $text i $lub w mongodb / mongoose?

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.

  1. $or wyrażenie może mieć tylko jeden specjalne wyrażenie indeksowe, będące argumentami „tekstowymi” lub „geoprzestrzennymi”.

  2. 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:

  1. Aby mieć serwer MongoDB w wersji 2.6 lub nowszej, który obsługuje $text składnia ( lub żyć z formularzami poleceń )

  2. Żyć z indeksowaniem wielu pól i używaniem jednego indeksu.

  3. 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.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Łączenie się z MongoDb za pomocą SSL z aplikacji JAVA

  2. Wstawianie aktualnej daty i godziny w mongodb

  3. Odłamki MongoDB i niezrównoważone obciążenia agregacji

  4. Webpack — w jaki sposób wymagana jest opcjonalna zależność w pakiecie (saslprep)

  5. Zapytanie o dokumenty, które posiadają wewnętrzne podpole o danej wartości