sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB textsökning filtrerar efter flera fält

Det förväntade beteendet är inte bara fullständigt dokumenterat men jag tycker också att ditt påstående är falskt. På ett standardprov som kan uppfylla de villkor du anger kommer resultaten att se ut som visas. Men först dokumentationsreferensen:

Sedan förklarar utdata av giltig fråga:

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

Så om du vill ställa frågor som har ett annat mönster än den "sammansatta nyckeln" du faktiskt har skapat och som uppfyller reglerna som är tydligt specificerade så borde du kanske också ha uppmärksammat huvudpoängen:

Så i "valfri form" sammansättning eller annan, om du söker mer än en definition av ett MongoDB-textindex kan du inte göra det. Detsamma gäller "geospatiala" index, såväl som det allmänna övervägandet att utanför en $or uttryck, eller en .sort() frågemotorn kan bara välja ett index åt gången.

Moderna versioner bör rapportera den mycket specifika raden tillsammans med felet:

Så "alla" fälten är obligatoriska och de "måste vara" en exakt matchning utan att använda ojämlikhetsoperatorer.

Om du inte kommer att "alltid" använda de andra fälten som en del av din fråga med villkor för "exakt matchning", kan du inte skapa ett sammansatt index tillsammans med en textsökning.




  1. MongoDB:Beräkna uppehållstid mellan varje statusvärdeändring

  2. Punktoperatorn hämtar inte underordnade egenskaper för ett Mongoose Document-objekt

  3. Hur grupperar man genom att ange en funktion för att hämta en nyckel?

  4. Hur använder man redis för att lagra hierarkisk data?