MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB-Textsuchfilter nach mehreren Feldern

Nicht nur das erwartete Verhalten ist vollständig dokumentiert aber ich finde deine Behauptung auch falsch. Bei einer Standardprobe, die die von Ihnen angegebenen Bedingungen erfüllen könnte, sehen die Ergebnisse wie gezeigt aus. Aber zuerst die Dokumentationsreferenz:

Dann die EXPLAIN-Ausgabe einer gültigen Abfrage:

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

Wenn Sie also Abfragen absetzen wollen, die ein anderes Muster haben als der von Ihnen eigentlich erstellte "Compound Key", der den klar vorgegebenen Regeln entspricht, dann sollten Sie möglicherweise auch auf den Hauptpunkt achten:

Wenn Sie also in "jeder Form" zusammengesetzt oder anders nach mehr als einer Definition eines MongoDB-Textindex suchen, können Sie dies nicht tun. Gleiches gilt für „Geospatial“-Indizes sowie die generelle Überlegung, dass außerhalb eines $or Ausdruck oder ein .sort() Die Abfrage-Engine kann jeweils nur einen Index auswählen.

Moderne Versionen sollten die sehr spezifische Zeile zusammen mit dem Fehler melden:

Daher sind "alle" Felder erforderlich und sie "müssen" exakt übereinstimmen, ohne Ungleichheitsoperatoren zu verwenden.

Wenn Sie die anderen Felder nicht "immer" als Teil Ihrer Abfrage mit "exakte Übereinstimmung"-Bedingungen verwenden, können Sie keinen zusammengesetzten Index zusammen mit einer Textsuche bilden.