Docs Menu
Docs Home
/ /

Usar vistas con la búsqueda de MongoDB

Puede crear un índice de búsqueda de MongoDB en un Vista para transformar documentos y colecciones. Esto permite indexar parcialmente una colección, admitir tipos o modelos de datos incompatibles, y mucho más.

Los siguientes ejemplos utilizan el bases de datos demuestra sample_mflix y sample_airbnb.

Nota

Desambiguación

Esta página describe las vistas estándar. Para obtener más información sobre las vistas materializadas bajo demanda, consulte Vistas materializadas bajo demanda.

Para obtener más información sobre las diferencias entre los tipos de vista, consulte Comparación con vistas materializadas a pedido.

Debe utilizar MongoDB 8.0 o superior.

Para editar una vista, debe tener un rol de administrador de usuario y utilizar el collMod comando de base de datos.

  • MongoDB Search admite vistas con las siguientes etapas:

  • Los nombres de índice deben ser únicos en una colección de origen y en todas sus vistas.

  • MongoDB Search no admite definiciones de vistas con operadores que produzcan resultados dinámicos, como la variable de sistema $$USER_ROLES y el operador de agregación $rand.

  • Las consultas de búsqueda de MongoDB devuelven los documentos originales tal como aparecen en la colección de origen.

  • Para recuperar el documento transformado, utilice la storedSource opción.

Para crear una vista, su rol debe tener el createCollection privilegio.

Los siguientes ejemplos demuestran cómo crear una vista, indexar parcialmente documentos y ejecutar consultas en la vista utilizando el índice.

El siguiente ejemplo actualiza la vista MongoDB movies_ReleasedAfter2000 para películas anteriores a 2000.

db.runCommand(
{
collMod: "movies_ReleasedAfter2000",
viewOn: "movies",
"pipeline": [
{
$match: {
$expr: {
$lt: [
"$released",
ISODate("2000-01-01T00")
]
}
}
}
]
}
)

Después de ejecutar este comando, MongoDB Search detecta automáticamente el cambio en la definición de la vista y realiza la reindexación sin tiempo de inactividad.

El siguiente ejemplo devuelve las canalizaciones en la vista movies_ReleasedAfter2000.

db.getCollectionInfos({ name: "movies_ReleasedAfter2000" })[0].options.pipeline
[
{
'$match': {
'$expr': { '$gt': [ '$released', ISODate('2000-01-01T00:00:00.000Z') ] }
}
}
]

Las transformaciones de vista muy complejas pueden causar un rendimiento más lento cuando Atlas lee la vista para filtrar y transformar la colección de origen. En este escenario, se debe considerar crear una vista materializada para evitar una carga adicional de replicación en Atlas. Para evitar la latencia de query causada por la transformación de la vista, se puede consultar la colección de origen directamente para recuperar los documentos originales.

Los índices cambian al estado FAILED en los siguientes escenarios:

  • Crea un índice en una vista que es incompatible con MongoDB Search.

  • Edita una vista de una manera que no cumple con los requisitos de compatibilidad de búsqueda de MongoDB.

  • Elimina o cambia la colección de origen de una vista.

    Por ejemplo, si se crea una vista en otra vista y se cambia la fuente de la vista principal a otra colección.

    Nota

    Esta limitación también se aplica si una vista es descendiente de otras vistas. Por ejemplo, no se puede cambiar ni eliminar la colección de origen de la que provienen todas las descendientes.

Los índices cambian al estado STALE en los siguientes escenarios:

Advertencia

Si la canalización de agregación definida en su vista es incompatible con los documentos de la colección, la replicación de la búsqueda falla. Por ejemplo, si una expresión $toDouble opera en un campo de documento que contiene una matriz, la replicación falla. Asegúrese de que su vista funcione correctamente con todos los documentos de la colección.

  • Si la definición de la vista provoca un error READY de agregación mientras un índice es, este STALE se convierte en. El índice volverá a READY después de resolver el documento o modificar la definición de la vista para que no vuelva a fallar.STALE Si es, el índice sigue siendo consultable. Si el índice se sale del registro de operaciones, se activa su reconstrucción.

  • Si la definición de la vista provoca un error en la canalización de agregación mientras el índice es BUILDING, la compilación del índice se bloquea hasta que se corrija el documento. El índice volverá a READY después de resolver el documento o modificar la definición de la vista para que no vuelva a fallar.

Puede ver los estados del índice en la interfaz de usuario de Atlas en la página de detalles del estado del índice.

Este error aparece cuando se consulta una vista utilizando una versión de MongoDB anterior a 8.1.

  • Si usa una versión de MongoDB anterior a la 8.0, le recomendamos actualizar a la 8.1o superior para consultar la vista directamente. Puede actualizar a la 8.0 para consultar la colección de origen.

  • Si usa MongoDB 8.0, debe consultar el índice de la vista con la colección de origen. Por ejemplo, ejecute .aggregate() en la colección en lugar de en la vista.

Al crear un índice de búsqueda de MongoDB en una vista, el proceso mongot realiza las mismas tareas que al crear un índice de búsqueda de MongoDB en una colección normal. El proceso mongot:

  1. Crea índices de búsqueda de MongoDB según las reglas de la definición de índice de la colección.

  2. Supervisa los flujos de cambio para conocer el estado actual de los documentos e índices de las colecciones para las que definió los índices de búsqueda de MongoDB.

  3. Procesa las consultas de búsqueda de MongoDB y devuelve los ID de documentos y otros metadatos de búsqueda de los documentos coincidentes a mongod, que luego realiza una búsqueda completa del documento y devuelve los resultados al cliente.

Cuando se crea un índice de búsqueda de MongoDB en una vista, la definición de vista se aplica durante el paso 1 y 2, y los documentos transformados se indexan según la definición del índice de búsqueda y luego se almacenan en el disco.

Para obtener más información sobre las vistas, consulte Vistas.

Para crear un índice de búsqueda vectorial MongoDB en una vista, consulte Usar vistas con búsqueda vectorial MongoDB.

Volver

Colecciones múltiples