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

Filtr wyszukiwania tekstu MongoDB według wielu pól

Oczekiwane zachowanie jest nie tylko w pełni udokumentowane ale uważam również, że twoje twierdzenie jest fałszywe. Na standardowej próbce, która może spełnić określone przez Ciebie warunki, wyniki będą takie, jak pokazano. Ale najpierw odniesienie do dokumentacji:

Następnie wyjaśnij wyjście prawidłowego zapytania:

{
    "queryPlanner" : {
       "plannerVersion" : 1,
       "namespace" : "test.mycollection",
       "indexFilterSet" : false,
       "parsedQuery" : {
           "$and" : [
               {
                   "cid" : {
                       "$eq" : 2
                   }
               },
               {
                   "uid" : {
                       "$eq" : 1
                   }
               },
               {
                   "$text" : {
                       "$search" : "cat",
                       "$language" : ""
                   }
               }
          ]
      },
      "winningPlan" : {
          "stage" : "TEXT",
          "indexPrefix" : {
               "uid" : 1,
               "cid" : 2
          },
          "indexName" : "uid_1_cid_1_content_text",
          "parsedTextQuery" : {

          }
      },
      "rejectedPlans" : [ ]
  },
  "serverInfo" : {
      "host" : "trashbox",
       "port" : 27017,
       "version" : "3.0.0",
       "gitVersion" : "a841fd6394365954886924a35076691b4d149168"
  },
  "ok" : 1
}

Jeśli więc chcesz generować zapytania, które mają inny wzorzec niż „klucz złożony”, który faktycznie utworzyłeś i który spełnia jasno określone reguły, prawdopodobnie powinieneś również zwrócić uwagę na główny punkt:

Tak więc w "dowolnej formie" złożonej lub innej, jeśli szukasz więcej niż jednej definicji indeksu tekstowego MongoDB, nie możesz tego zrobić. To samo dotyczy indeksów „geoprzestrzennych”, a także ogólnego rozważenia, że ​​poza $or wyrażenie lub .sort() silnik zapytań może wybrać tylko jeden indeks na raz.

Nowoczesne wersje powinny zgłaszać bardzo konkretną linię wraz z błędem:

Zatem „wszystkie” pola są wymagane i „muszą być” dokładnym dopasowaniem bez użycia operatorów nierówności.

Jeśli nie zamierzasz „zawsze” używać innych pól jako części zapytania z warunkami „dokładnego dopasowania”, nie możesz utworzyć indeksu złożonego wraz z wyszukiwaniem tekstowym.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Zapytanie Mongo na polach podrzędnych

  2. Jak zdobyć wszystkie okręgi, w których znajduje się Punkt?

  3. Jak wykonywać podstawowe operacje na zapytaniach w MongoDB

  4. MongoDB:Mapreduce:Reduce->Multiple jeszcze nieobsługiwane

  5. Wyszukiwanie wartości dowolnego pola w MongoDB bez jawnego nazywania go