Una vista MongoDB es un objeto consultable de solo lectura cuyo contenido está definido por un canalización de agregación en otras colecciones o vistas.
MongoDB no guarda el contenido de la vista en el disco. El contenido de una vista se calcula on-demand cuando un cliente consulta la vista.
Nota
Desambiguación
Esta página discute las vistas estándar. Para obtener más información sobre las vistas materializadas on-demand, consulte Vistas materializadas On-demand.
Para comprender las diferencias entre los tipos de vista, consulte Comparación con vistas materializadas bajo demanda.
Puedes crear vistas materializadas en la interfaz de usuario para despliegues alojados en MongoDB Atlas.
Casos de uso
Puede usar vistas para:
Cree una vista de una colección de datos de empleados para excluir cualquier información de identificación personal (PII). Su aplicación puede consultar la vista para buscar datos de empleados que no contengan información de identificación personal (PII). Información de identificación personal.
Cree una vista de una colección de datos de sensores para agregar campos calculados y métricas. Su aplicación puede usar
find operationspara consultar los datos calculados.Se debe crear una vista que una dos colecciones que contengan el historial de inventario y pedidos. La aplicación puede consultar la vista sin gestionar ni entender el pipeline subyacente.
Crea un índice de MongoDB Search en una vista, que transforma documentos y colecciones, para que pueda indexar parcialmente una colección, admitir tipos de datos o modelos de datos incompatibles, y más.
Crea un índice de búsqueda vectorial en una vista, que transforma documentos y colecciones para que puedas indexar parcialmente una colección, dar soporte a tipos de datos o modelos de datos incompatibles, y más.
Cree y gestione vistas
Para aprender a crear y gestionar vistas, consulte los siguientes recursos:
Comparación con vistas materializadas on-demand
MongoDB ofrece dos tipos diferentes de vistas: vistas estándar y vistas materializadas on-demand. Ambos tipos de vistas devuelven los resultados de una canalización de agregación.
Las vistas estándar se calculan cuando lees la vista y no se almacenan en el disco.
Las vistas materializadas on-demand se almacenan y se leen desde el disco. Utilizan una etapa
$mergeo una$outpara actualizar los datos guardados.Nota
Al utilizar
$merge, puede emplear flujos de cambios para monitorear los cambios en la vista materializada. Cuando utilice$out, no podrá observar los cambios en la vista materializada.
Indexes
Las vistas estándar utilizan los índices de la colección subyacente. Como resultado, no puede crear, descartar ni reconstruir índices generales directamente en una vista estándar, ni obtener una lista de índices generales en la vista.
MongoDB almacena los índices de búsqueda y los índices de búsqueda vectoriales en disco. En consecuencia, se pueden crear índices de búsqueda de MongoDB e índices de búsqueda vectorial en vistas compatibles que contengan solo las siguientes etapas:
También puede crear índices directamente en las vistas materializadas on-demand, porque MongoDB almacena esos índices en el disco.
Rendimiento
Las vistas materializadas on-demand ofrecen un mejor rendimiento de lectura que las vistas estándar porque se leen desde el disco en lugar de calcularse como parte de la query. Este beneficio en el rendimiento aumenta en función de la complejidad del pipeline y del tamaño de los datos que se están agregando.
Comportamiento
Las siguientes secciones describen el comportamiento específico de las vistas.
Solo lectura
Las vistas son de solo lectura. Las operaciones de guardar en las vistas devuelven un error.
Aislamiento de snapshot
Las vistas no mantienen marcas de tiempo de los cambios en la colección ni admiten el aislamiento de lectura en un punto específico o aislamiento de lectura de instantáneas.
Ver pipelines
La canalización de agregación subyacente de la vista está sujeta al límite de memoria de 100 megabytes para operaciones de ordenamiento y agrupamiento bloqueantes.
A partir de MongoDB 6.0, las etapas de la canalización que requieren más de 100 megabytes de memoria para ejecutarse escriben archivos temporales en el disco de forma predeterminada. Estos archivos temporales duran mientras se ejecuta la canalización y pueden afectar el espacio de almacenamiento de la instancia. En versiones anteriores de MongoDB, se debía pasar { allowDiskUse: true } a los comandos find y aggregate para habilitar este comportamiento.
Los comandos individuales find y aggregate pueden anular el parámetro allowDiskUseByDefault de las siguientes maneras:
Se utiliza
{ allowDiskUse: true }para permitir la escritura de archivos temporales en el disco cuandoallowDiskUseByDefaultse establece enfalseSe utiliza
{ allowDiskUse: false }para prohibir la escritura de archivos temporales en el disco cuandoallowDiskUseByDefaultesté configurado entrue
Nota
Para MongoDB Atlas, se recomienda configurar el escalado automático de almacenamiento para evitar que los queries de larga duración llenen el almacenamiento con archivos temporales.
Si su clúster de Atlas utiliza el escalado automático de almacenamiento, los archivos temporales pueden hacer que su clúster escale al siguiente nivel de almacenamiento.
Colecciones de series de tiempo
Las colecciones de series de tiempo son vistas no materializadas que se pueden escribir. Las limitaciones para las vistas se aplican a las colecciones de series de tiempo. Para obtener más información, consulte las Limitaciones de la colección de series de tiempo.
Control de acceso
Si la implementación aplica autenticación:
Para crear una vista, debes tener el privilegio
createCollectionen la base de datos donde se crea la vista. Además, si tienes el privilegiofinden el namespace de la vista que deseas crear, también debes tener el privilegiofinden los siguientes recursos:La colección o vista de origen desde la cual se crea la nueva vista.
Cualquier colección o vista referenciada en el pipeline de vistas.
Para consultar una vista, debes tener el privilegio
finden el namespace de la vista. No necesitas el privilegiofinden la colección de origen ni en ningún namespace referenciado en la pipeline de vistas.
Un usuario con el rol readWrite incorporado en la base de datos tiene los privilegios necesarios para ejecutar las operaciones mencionadas. Para conceder los permisos necesarios, realiza una de las siguientes acciones:
Crea un usuario con el rol requerido.