sql >> Base de Datos >  >> NoSQL >> MongoDB

Filtro de búsqueda de texto MongoDB por múltiples campos

El comportamiento esperado no solo está completamente documentado pero también encuentro que tu afirmación es falsa. En una muestra estándar que podría cumplir las condiciones que especifique, los resultados serán los que se muestran. Pero primero la referencia de la documentación:

Luego, la salida explicada de una consulta válida:

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

Entonces, si desea realizar consultas que tengan un patrón diferente a la "clave compuesta" que realmente creó y que cumpla con las reglas que se especifican claramente, entonces posiblemente también debería haber prestado atención al punto principal:

Entonces, en "cualquier forma" compuesta u otra, si está buscando más de una definición de un índice de texto MongoDB, entonces no puede hacer eso. Lo mismo se aplica a los índices "geoespaciales", así como la consideración general de que fuera de un $or expresión, o un .sort() el motor de consultas solo puede seleccionar un índice a la vez.

Las versiones modernas deberían informar la línea muy específica junto con el error:

Por lo tanto, "todos" los campos son obligatorios y "deben ser" una coincidencia exacta sin usar operadores de desigualdad.

Si no va a usar "siempre" los otros campos como parte de su consulta con condiciones de "coincidencia exacta", entonces no puede formar un índice compuesto junto con una búsqueda de texto.