No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Convierte tus certificados en títulos universitarios en USA

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

18 Días
22 Hrs
47 Min
34 Seg

Agregando indexadores

17/24
Recursos

Una base de datos puede tener incluso millones de documentos, lo que provocaría que las consultas sean lentas. Como desarrollador o desarrolladora de software, es tu responsabilidad asegurar la eficiencia de las consultas en tu aplicación.

Cómo funcionan los indexadores en MongoDB

MongoDB utiliza el concepto de “Indexador” para permitir preseleccionar campos en tus esquemas que sabes que serán utilizados para realizar consultas a través de ellos y mejorar así la eficiencia de las mismas.

Crear un indexador en los esquemas de Mongoose y NestJS es muy sencillo. Basta con agregar al decorador @Prop() la propiedad { index: true } para indicar que ese campo será indexado y se realizarán consultas a través de él.

// products/product.entity.ts
export class Product extends Document {

  @Prop({ type: Number, index: true })
  price: number;
}

export const ProductSchema = SchemaFactory.createForClass(Product);
ProductSchema.index({ price: 1, stock: -1 });    // Orden ascendente o descendente de la indexación

Cómo crear índice UNIQUE

Otro tipo de índice que puedes crear en una propiedad es el Unique para que un campo sea único en una colección.

// products/product.entity.ts
export class Product extends Document {

  @Prop({ type: String, unique: true })
  idProducto: string;
}

Así, el campo idProducto será único dentro de todos los documentos de la colección a la cual pertenece. Provocará un error si se quiere ingresar un idProducto ya existente.

Recuerda elegir muy bien los índices de cada esquema. No puedes seleccionar TODOS los campos como índices, ya que si todos ellos son importantes, ninguno lo será y Mongo no priorizará las búsquedas a través de ningún campo.

También considera que los índices suelen utilizarse en bases de datos con millones de documentos en una colección. Si tu colección tiene unos pocos cientos o incluso miles de documentos, tal vez no sea necesario utilizar índices.

Contribución creada por: Kevin Fiorentino (Platzi Contributor).


Código de ejemplo para agregar indexadores

// src/products/entities/product.entity.ts
...
export class Product extends Document {
  ...

  @Prop({ type: Number, index: true }) // 👈
  price: number;

}

export const ProductSchema = SchemaFactory.createForClass(Product);
ProductSchema.index({ price: 1, stock: -1 });  // 👈

Aportes 2

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Los indexadores admiten la ejecución eficiente de consultas en MongoDB. Sin indexadores , MongoDB debe realizar un escaneo de la colección, es decir, escanear cada documento en una colección, para seleccionar aquellos documentos que coincidan con la declaración de consulta. Si existe un índice apropiado para una consulta, MongoDB puede usar el índice para limitar la cantidad de documentos que debe inspeccionar.

documentacion

Esto tambien es útil si se quiere generar una llave unica entre dos campos, la función recibe un parametro adicional que es un objeto de configuración así 👉

ProductSchema.index({ price: 1, stock: -1 }, {unique: true});