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

MongoDB Nie można kanonizować zapytania:BadValue Za dużo wyrażeń tekstowych

Błąd jest dość dokładny. To, co próbujesz zrobić, to utworzyć „wiele zapytań tekstowych” w $or stan. MongoDB nie może tego zrobić i faktycznie jest to określone w pierwszym wierszu Ograniczenia na stronie podręcznika dla $text .

Co więcej, nie jesteś przypuszczalny aby to zrobić, ale raczej określ jeden indeks tekstowy w swojej kolekcji, aby w razie potrzeby przeszukać wiele pól:

db.collection.ensureIndex({ "comments": "text", "title": "text" })

A potem prawdopodobnie chcesz przypisać wagi jak pokazano tutaj .

Ale wydaje się, że tak naprawdę prosisz o wyszukanie „wielu terminów”. Więc nie używasz $or w tym celu, ale po prostu prześlij listę terminów oddzielonych spacjami:

db.collection.find({ "$text": { "$search": "something else" } })

Wszelkie słowa na liście rozdzielanej spacjami są następnie wyszukiwane w kontekście dowolnych pól znajdujących się w indeksie tekstowym, a każdy dokument zawierający „dowolne” z tych słów zostanie zwrócony. Z wynikami uporządkowanymi według „wagi” większej liczby dopasowań słów z tej listy.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Pymongo, zapytanie w polu listy i/lub

  2. Jak serializować ObjectId do JSON?

  3. model mangusty, tablica ciągów, tablica struktury obiektów

  4. Metody agregacji mongoidów na osadzonych dokumentach?

  5. różnica między agregacją ($match) a znajdowaniem w MongoDB?