sql >> Databáze >  >> NoSQL >> MongoDB

Filtr textového vyhledávání MongoDB podle více polí

Nejen, že je očekávané chování úplně zdokumentováno ale také považuji vaše tvrzení za nepravdivé. Na standardním vzorku, který by mohl splňovat vámi zadané podmínky, budou výsledky takové, jak je uvedeno. Nejprve však odkaz na dokumentaci:

Potom vysvětlený výstup platného dotazu:

{
    "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
}

Pokud tedy chcete zadávat dotazy, které mají jiný vzor než „složený klíč“, který jste skutečně vytvořili a který splňuje pravidla, která jsou jasně specifikována, pak byste možná měli věnovat pozornost hlavnímu bodu:

Takže v "jakékoli formě" složené nebo jiné, pokud hledáte více než jednu definici textového indexu MongoDB, nemůžete to udělat. Totéž platí pro „geoprostorové“ indexy a také obecná úvaha, že mimo $or výraz nebo .sort() dotazovací stroj může vybrat pouze jeden index najednou.

Moderní verze by měly hlásit velmi konkrétní řádek spolu s chybou:

Takže "všechna" pole jsou povinná a "musí" se přesně shodovat bez použití operátorů nerovnosti.

Pokud nebudete „vždy“ používat ostatní pole jako součást vašeho dotazu s podmínkami „přesné shody“, nemůžete spolu s textovým vyhledáváním vytvořit složený index.




  1. Indexování Mongoose v produkčním kódu

  2. Jak převést milisekundy na datum v agregaci mongodb?

  3. MongoDB Java API:Rozdíl mezi com.mongodb.DBCollection.Save() a com.mongodb.DBCollection.Insert()?

  4. Dotaz, kde součet dvou polí je menší než zadaná hodnota