Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

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, especifique los campos elegidos en la opción wildcardProjection:

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:

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 no admite queries sobre campos que no estén incluidos en el wildcardProjection, como esta query:

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

Si existen campos de documento que rara vez query, puede 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 filtrar campos, consulta Filtro de campos con un wildcardProjection..

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