Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Incluir o excluir campos en un índice comodín

Cuando creas un índice comodín, puedes especificar los campos que se incluirán o excluirán en el índice. Esto te permite hacer lo siguiente:

  • Crea un índice comodín que solo cubra campos específicos. Por ejemplo, si tienes varios documentos incrustados con múltiples subcampos, puedes crear un índice para cubrir queries tanto en documentos incrustados como en sus subcampos.

  • Crea un índice comodín que omita campos específicos. Por ejemplo, si tienes una colección que contiene un campo que nunca se query, puedes omitir ese campo del índice.

Para incluir o excluir campos en un índice comodín, especifica los campos elegidos en el wildcardProjection opción:

db.<collection>.createIndex(
{
"$**" : <sortOrder>
},
{
"wildcardProjection" : {
"<field1>" : < 0 | 1 >,
"<field2>" : < 0 | 1 >,
...
"<fieldN>" : < 0 | 1 >
}
}
)

En el documento wildcardProjection, el valor 0 o 1 indica si el campo está incluido o excluido en el índice:

  • 0 significa que el campo está excluido.

  • 1 significa que el campo está incluido.

  • Para utilizar la opción wildcardProjection, la clave del índice debe ser $**.

  • Los índices comodín no admiten mezclar instrucciones de inclusión y exclusión en el documento wildcardProjection, excepto cuando se incluye explícitamente el campo _id. Por ejemplo:

    • El siguiente documento wildcardProjection es inválido porque especifica tanto una inclusión como una exclusión de un campo:

      {
      "wildcardProjection" : {
      "attributes" : 0,
      "users" : 1
      }
      }
    • El siguiente documento wildcardProjection es válido porque, aunque especifica tanto inclusión como exclusión, incluye el campo _id:

      {
      "wildcardProjection" : {
      "attributes" : 0,
      "_id" : 1
      }
      }

Creá una colección products que contenga los siguientes documentos:

db.products.insertMany( [
{
"item": "t-shirt",
"price": "29.99",
"attributes": {
"material": "cotton",
"color": "blue",
"size": {
"units": "cm",
"length": 74
}
}
},
{
"item": "milk",
"price": "3.99",
"attributes": {
"sellBy": "02-06-2023",
"type": "oat"
}
},
{
"item": "laptop",
"price": "339.99",
"attributes": {
"memory": "8GB",
"size": {
"units": "inches",
"height": 10,
"width": 15
}
}
}
] )

Cada documento tiene un campo attributes que contiene detalles del producto. Los subcampos de attributes varían dependiendo del producto.

Puedes usar la opción wildcardProjection para:

  • Incluir campos específicos en un índice comodín

  • Excluir campos específicos de un índice comodín

Si consultas con frecuencia ciertos campos de documentos, puedes especificar esos campos en un wildcardProjection para respaldar esas consultas sin añadir un exceso innecesario al índice.

La siguiente operación crea un índice comodín que contiene todos los valores escalares (cadenas de texto y números) de los campos attributes.size y attributes.color:

db.products.createIndex(
{
"$**" : 1
},
{
"wildcardProjection" : {
"attributes.size" : 1,
"attributes.color" : 1
}
}
)

Si bien el patrón clave "$**" cubre todos los campos del documento, el campo wildcardProjection limita el índice solo a los campos incluidos.

Si un campo es un documento incrustado o un arreglo (como attributes.size), el índice comodín recurre en el campo e indexa todos los valores de campos escalares incrustados.

El índice creado soporta queries sobre cualquier valor escalar incluido en el objeto wildcardProjection. Por ejemplo, el índice admite estas queries:

db.products.find( { "attributes.size.height" : 10 } )
db.products.find( { "attributes.color" : "blue" } )

El índice solo admite consultas sobre los campos incluidos en el objeto wildcardProjection. En este ejemplo, MongoDB realiza un escaneo de colección para la siguiente query porque incluye un campo que no está presente en el objeto wildcardProjection:

db.products.find ( { "item": "milk" } )

Si hay campos de documentos que rara vez query, puedes crear un índice comodín que omita esos campos.

La siguiente operación crea un índice comodín en todos los campos de documentos de la colección products, pero omite el campo attributes.memory del índice:

db.products.createIndex(
{
"$**" : 1
},
{
"wildcardProjection" : {
"attributes.memory" : 0
}
}
)

Si bien el patrón clave "$**" cubre todos los campos en el documento, el campo wildcardProjection excluye los valores attributes.memory del índice.

Si un campo es un documento incrustado o un arreglo (como attributes.size), el índice comodín recurre en el campo e indexa todos los valores de campos escalares incrustados.

Por ejemplo, el índice admite estos queries:

db.products.find( { "attributes.color" : "blue" } )
db.products.find( { "attributes.size.height" : 10 } )

El índice no admite queries sobre attributes.memory, porque ese campo se omitió en el índice.

Para aprender a usar la proyección comodín con un índice comodín compuesto para filtro campos, consulta Filtrar campos con un wildcardProjection.

Para obtener más información sobre los comportamientos y casos de uso de los índices comodín, consulta:

Volver

Crear

En esta página