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

Índices para la optimización de query

En esta guía, aprenderá a usar la extensión de MongoDB para Hibernate ORM para declarar índices de un solo campo, compuestos y únicos en una entidad. La extensión de Hibernate ORM traduce los índices y las restricciones de unicidad que declare en sus entidades a operaciones de índice de MongoDB cuando habilite la generación de esquemas.

Para crear los índices y las restricciones únicas declaradas en sus entidades, habilite la generación de esquemas en la configuración de su aplicación. Puede habilitar la generación de esquemas con la acción create o create-drop:

  • create: Crea los objetos de esquema sin eliminarlos cuando se cierra SessionFactory.

  • create-drop: Crea los objetos de esquema cuando se abre SessionFactory y los elimina cuando se cierra.

Advertencia

La acción create-drop está destinada al desarrollo y las pruebas. No la utilice cuando necesite conservar datos de producción.

Si utiliza Spring Boot, añada la siguiente propiedad a su archivo application.properties:

spring.jpa.properties.jakarta.persistence.schema-generation.database.action=create-drop

Si configura Jakarta Persistence directamente, agregue la siguiente propiedad a su archivo persistence.xml:

<property name="jakarta.persistence.schema-generation.database.action"
value="create-drop"/>

Alternativamente, puede configurar la propiedad en su archivo hibernate.properties:

jakarta.persistence.schema-generation.database.action=create-drop

Cuando se ejecuta la generación del esquema, la extensión Hibernate ORM crea la colección y emite comandos MongoDB createIndexes para los índices y las restricciones únicas que declaran sus entidades.

Los ejemplos de esta guía declaran índices y restricciones únicas agregando las anotaciones @Index y @UniqueConstraint a la anotación @Table de la siguiente entidad Movie:

@Entity
@Table(name = "movies")
public class Movie {
@Id
@ObjectIdGenerator
private ObjectId id;
private String title;
private String plot;
private int year;
private List<String> cast;
private List<String> directors;
public Movie(String title, String plot, int year, List<String> cast, List<String> directors) {
this.title = title;
this.plot = plot;
this.year = year;
this.cast = cast;
this.directors = directors;
}
public Movie() {
}
// Getter and setter methods
}

Los índices de campo único son índices que hacen referencia a un solo campo dentro de los documentos de una colección. Mejoran el rendimiento de las consultas y la ordenación para un solo campo.

El siguiente ejemplo crea un índice de campo único en orden descendente en el campo year:

@Table(
name = "movies",
indexes = {
@Index(name = "idx_year", columnList = "year desc")
})

Establezca columnList con el nombre del campo y agregue asc o desc para especificar la dirección. Si omite la dirección, MongoDB crea un índice ascendente. El elemento name especifica el nombre del índice de MongoDB.

Para obtener más información, consulta Índices de un solo campo en el manual de MongoDB Server.

Índices compuestos contienen referencias a múltiples campos dentro de los documentos de una colección, mejorando el rendimiento de las consultas y la clasificación.

El siguiente ejemplo crea un índice compuesto en los campos title y year en orden descendente:

@Table(
name = "movies",
indexes = {
@Index(name = "idx_title_year", columnList = "title desc,year desc")
})

El orden de los campos en columnList determina el orden en que MongoDB ordena las claves del índice, lo que afecta a los prefijos de consulta que el índice puede admitir. Por ejemplo, un índice en title seguido de year puede admitir consultas que coincidan solo con title, mientras que un índice en year no ayuda a una consulta que coincida solo con title.

Para obtener más información, se puede consultar Índices compuestos en el manual de MongoDB Server.

Los índices únicos garantizan que los campos indexados no almacenen valores duplicados.

Puedes crear un índice único con la anotación @Index o @UniqueConstraint:

  • Utilice @Index(unique = true) cuando necesite especificar opciones de índice, como la dirección del campo.

  • Utilice @UniqueConstraint cuando desee utilizar el modelo de restricción a nivel de tabla. Los campos en columnNames definen el orden de la clave, y @UniqueConstraint no especifica la dirección de los campos, por lo que el índice único resultante es ascendente.

El siguiente ejemplo crea un índice único en el campo title:

@Table(
name = "movies",
indexes = {
@Index(name = "idx_title", columnList = "title", unique = true)
})

El siguiente ejemplo crea una restricción única en los campos title y plot:

@Table(
name = "movies",
uniqueConstraints = {
@UniqueConstraint(name = "uk_title_plot", columnNames = {"title", "plot"})
})

MongoDB trata un valor null o un valor faltante en un campo indexado como un valor indexado. Debido a la restricción de unicidad, un índice único de un solo campo solo puede contener un documento con un valor null en su entrada de índice.

Importante

La creación de índices únicos puede fallar.

MongoDB no puede crear un índice único en el campo o campos especificados si la colección ya contiene documentos con valores duplicados para esos campos. Revise sus datos existentes en busca de valores duplicados antes de crear un índice único.

Para obtener más información, consulte Índices únicos en el manual del servidor MongoDB.

Para obtener más información sobre cómo crear entidades y asignar datos incrustados, consulte la guía Crear entidades para representar colecciones.

Para aprender a usar sus entidades para ejecutar operaciones de base de datos, consulte las guías "Realizar operaciones CRUD" y "Especificar una consulta".

Para ver una lista de los tipos de índices que admite la extensión Hibernate ORM, consulte la página de compatibilidad de funciones.

Para obtener más información sobre las anotaciones de Jakarta Persistence utilizadas en esta guía, consulte la documentación de la API de Jakarta Persistence.