Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

Usar vistas con MongoDB Search

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

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

Nota

Desambiguación

Esta página discute las vistas estándar. Para aprender más sobre las vistas materializadas on-demand, consulte Vistas materializadas On-demand.

Para aprender sobre las diferencias entre los tipos de vistas, se puede consultar Comparación con vistas materializadas on-demand.

Debes usar MongoDB 8.0 o superior.

Para editar una Vista, debes tener el rol de Administrador de Usuario y utilizar el comando collMod comando de base de datos.

  • MongoDB Search admite vistas con las siguientes etapas:

  • Los nombres de los índices deben ser únicos en toda una colección de fuente y todas sus vistas.

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

  • MongoDB Search queries devuelven los documentos originales tal como aparecen en la colección de origen.

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

Para crear una Vista, tu rol debe tener el privilegio de createCollection.

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

El siguiente ejemplo actualiza la vista movies_ReleasedAfter2000 de MongoDB para las 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 retorna las pipelines 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 vistas altamente complejas pueden aumentar el tiempo de indexación y query. Esto se debe a que el mongod debe leer la definición de vista cuando filtra y transforma las entradas del oplog durante la indexación (sincronización inicial y replicación en estado estable), y cuando aplica esas transformaciones a los documentos devueltos en tiempo de query.

Considera crear una vista materializada para evitar una carga extra de replicación en Atlas. También puedes query la colección de origen directamente para evitar la latencia de queries que se produce con la transformación de la vista.

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

  • Creas 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 MongoDB Search.

  • Remover o cambiar la colección fuente de una vista.

    Por ejemplo, si se crea una vista sobre otra vista y se cambia la fuente de la vista superior 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 o remover la colección de origen de la que provienen todos los descendientes.

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

Advertencia

Si el pipeline de agregación definido en tu Vista es incompatible con los documentos de la colección, la replicación de búsqueda falla. Por ejemplo, si una expresión $toDouble opera sobre un campo del documento que contiene un arreglo, la replicación falla. Asegúrate de que tu Vista funcione con todos los documentos de la colección sin errores.

  • Si la definición de la vista provoca un fallo de agregación mientras un índice está READY, el índice se convierte en STALE. El índice volverá a READY después de que resuelvas el documento o cambies la definición de vista para que no falle más. Cuando STALE, el índice sigue siendo consultable. Si el índice se cae del oplog, se activa una reconstrucción del índice.

  • Si la definición de la Vista provoca un fallo en el pipeline de agregación mientras el índice es BUILDING, la creación de índices queda atascada hasta que soluciones el documento. El índice volverá a READY después de que resuelvas el documento o cambies la definición de vista para que no falle más.

Puedes ver los estados de los índices en la Interfaz de Usuario de Atlas en la página de Detalles del estado del índice.

Este error aparece cuando se hace una query a una vista usando una versión de MongoDB anterior a 8.1.

  • Si utiliza una versión de MongoDB anterior a la 8.0, le recomendamos que actualice a la 8.1+ para query la vista directamente. Puedes actualizar a 8.0 para query la colección de origen.

  • Si usas MongoDB 8.0, deberás query el índice de visualización en la colección de origen. Por ejemplo, ejecuta .aggregate() en la colección en lugar de en la vista.

Cuando se crea un índice de MongoDB Search en una vista, el proceso mongot realiza las mismas tareas que cuando se crea un índice de MongoDB Search en una colección normal. El proceso mongot:

  1. Crea índices de MongoDB Search basado en las reglas en la definición del índice para la colección.

  2. Supervisa los flujos de cambio para el estado actual de los documentos e índices de las colecciones para las que hayas definido los índices MongoDB Search.

  3. Procesa consultas de búsqueda de MongoDB Search y devuelve los IDs de los documentos y otros metadatos de búsqueda para los documentos coincidentes a mongod, que luego realiza una búsqueda completa de documentos y devuelve los resultados al cliente.

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

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

Para crear un índice de búsqueda vectorial de MongoDB en una Vista, consulta Usar Vistas con búsqueda vectorial de MongoDB.

Volver

Múltiples colecciones