1. Libros y videos
  2. MongoDB
  3. Vistas
Extrait - MongoDB Comprensión y optimización de la gestión de datos (con ejercicios y soluciones)
Extractos del libro
MongoDB Comprensión y optimización de la gestión de datos (con ejercicios y soluciones) Volver a la página de compra del libro

Vistas

Introducción

Introducidas en la versión 3.4 de MongoDB, las vistas operan sobre colecciones u otras vistas y deben residir en la misma base de datos que estas últimas. En cierto modo, son colecciones de solo lectura, y cuando se relacionan con colecciones, pueden utilizar los mismos índices que estas. Sin embargo, es imposible modificar los índices de una colección desde una vista basada en ella, del mismo modo que es imposible renombrar una vista (habrá que destruirla con drop, exactamente igual que se hizo con las colecciones utilizadas en los numerosos ejemplos mostrados, y luego volver a crearla).

Crear una vista

Las vistas utilizan el framework (marco de trabajo) de agregación. Hay dos formas de crearlas: utilizando un método abreviado en el shell o ejecutando directamente el comando de base de datos al que el primer método sirve de envoltura (wrapper).

Para el primer método, la sintaxis es la siguiente:

db.createView(< nombre >, < fuente >, < pipeline >, < intercalacion > ) 

De estos cuatro parámetros, intercalacion es el único opcional. El nombre de la vista será el primero de los parámetros obligatorios, seguido de fuente, que designa la vista o colección de destino, y pipeline, que es una matriz que contiene su pipeline de agregación. Si se prefiere utilizar comandos, esta es la sintaxis por la que se opta:

db.runCommand( { create: < nombre >, viewOn: < fuente >,  
pipeline: < pipeline >, intercalacion: < intercalación> } ) 

Para utilizar las vistas, vamos a crear una colección llamada stock (existencia) con unos cuantos documentos:

db.stock.insertMany([  
{"nombre": "Cuchillas de afeitar x 8", "cant": 256, "precio" : 12.99, "sku": 
"ST-01-235"}, 
{"nombre": "Incienso - paquete de 12", "cant": 2135, "precio": 5.99, "sku": "SW-66-985"}, 
{"nombre": "Velas...

Interactuar con las vistas

Al igual que con una colección, llamamos al método find de esta vista:

db.inventario.find() 

El resultado de esta invocación será:

[  
  { nombre: 'Cuchillas de afeitar x 8', cant: 256 },  
  { nombre: 'Incienso - paquete de 12', cant: 2135 },  
  { nombre: 'Velas de colores', cant: 7836 }  
] 

Podemos utilizar la ordenación en la vista, por ejemplo, ordenar por cantidad en forma descendente:

db.inventario.find().sort({"cant": -1}) 

o bien un orden natural:

db.inventario.find().sort({$natural: 1}) 

Operaciones de reproducción disponibles en las vistas

Además de find, se pueden utilizar las siguientes operaciones en las vistas:

  • findOne()

  • aggregate()

  • countDocuments()

  • estimatedDocumentCount()

  • distinct()

Para recordar

  • Las vistas operan tanto sobre colecciones como sobre otras vistas y deben residir en la misma base de datos que estas últimas.

  • Es imposible cambiarles el nombre, habrá que destruirlas usando drop y luego volver a crearlas.

La definición de una vista es pública, por lo que hay que tener cuidado con los datos privados que puedan aparecer en ella.