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.
Requisitos
Debe utilizar MongoDB 8.0 o superior.
En MongoDB v8.0+:
Utilice la interfaz de usuario de Atlas o la API de administración de Atlas para crear índices de búsqueda de MongoDB en las vistas.
Ejecuta las queries de MongoDB Search en la colección de origen. Hace referencia al índice de MongoDB Search que se creó en la Vista. Estas queries devuelven los documentos originales tal como aparecen en la colección de origen.
En MongoDB v8.1+, también puedes:
Para editar una vista, debe tener un rol de administrador de usuario y utilizar el collMod comando de base de datos.
Limitaciones
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
storedSourceopción.
Permisos requeridos
Para crear una vista, su rol debe tener el createCollection privilegio.
Ejemplos
Los siguientes ejemplos demuestran cómo crear una vista, indexar parcialmente documentos y ejecutar consultas en la vista utilizando el índice.
Puede filtrar documentos para indexar parcialmente una colección. El siguiente ejemplo crea una vista en la colección sample_mflix.movies para que pueda buscar solo películas estrenadas después del 1 de enero de 2000.
Conéctese al clúster usando mongosh.
Para obtener más información, consulte Conectarse a un clúster a través de mongosh.
En Atlas, vaya a la Clusters Página para su proyecto.
Si aún no se muestra, seleccione la organización que contiene su proyecto deseado en el menú Organizations de la barra de navegación.
Si aún no aparece, selecciona el proyecto deseado en el menú Projects de la barra de navegación.
En la barra lateral, haz clic en Clusters en la sección Database.
La página de clústeres se muestra.
En Atlas, vaya a la Search & Vector Search página de su clúster.
Puedes ir a la página de búsqueda de MongoDB desde la opción Search & Vector Search o desde el Data Explorer.
Si aún no aparece, se debe seleccionar la organización que contiene el proyecto en el menú Organizations de la barra de navegación.
Si aún no se muestra, seleccione su proyecto en el menú Projects de la barra de navegación.
En la barra lateral, haz clic en Search & Vector Search en la sección Database.
Si no tienes clústeres, haz clic en Create cluster para crear uno. Para obtener más información, consulta Crear un clúster.
Si el proyecto tiene varios clústeres, se debe seleccionar el clúster que se desea usar en el menú desplegable Select cluster y luego se debe hacer clic en Go to Search.
Aparece la página de Búsqueda y Búsqueda Vectorial.
Si aún no aparece, se debe seleccionar la organización que contiene el proyecto en el menú Organizations de la barra de navegación.
Si aún no se muestra, seleccione su proyecto en el menú Projects de la barra de navegación.
En la barra lateral, haz clic en Data Explorer en la sección Database.
Expanda la base de datos y seleccione la colección.
Haga clic en la pestaña Indexes para la colección.
Haga clic en el enlace Search and Vector Search en el banner.
Aparece la página de Búsqueda y Búsqueda Vectorial.
Se debe iniciar la configuración del índice.
Realiza las siguientes selecciones en la página y luego haz clic en Next.
Search Type | Seleccione el tipo de índice MongoDB Search. |
Index Name and Data Source | Especifique la siguiente información:
|
Configuration Method | For a guided experience, select Visual Editor. To edit the raw index definition, select JSON Editor. |
IMPORTANTE:
El índice de MongoDB Search se llama default por defecto. Si se mantiene este nombre, el índice será el índice de búsqueda por defecto para cualquier query de MongoDB Search que no especifique una opción de index diferente en sus operadores. Si se crean varios índices, recomendamos mantener una convención de nomenclatura coherente y descriptiva en todos los índices.
Verifique el estado.
El índice recién creado aparece en la pestaña Atlas Search. Mientras se está construyendo el índice, el campo Status muestra Build in Progress. Cuando se termina de construir el índice, el campo Status muestra Active.
IMPORTANTE: Las colecciones más grandes tardan más tiempo en indexarse. Se recibirá una notificación por correo electrónico cuando el índice haya terminado de construirse.
Consulta el releasedAfter2000Index índice parcial.
Nota
El siguiente ejemplo consulta el índice releasedAfter2000Index ejecutando el comando .aggregate en la vista movies_ReleasedAfter2000. Si su clúster ejecuta MongoDB v8.0, debe consultar la colección de origen (por ejemplo, movies) usando el índice de la vista. Actualice a MongoDB v8.1o superior para consultar la vista directamente.
[ { "$search": { "index": "releasedAfter2000Index", "text": { "path": "title", "query": "foo" }, "sort": { "released": 1 } } } ]
SCORE: 3.120296001434326 _id: “573a13d2f29313caabd929f8” awards: Object cast: Array (4) countries: Array (1) directors: Array (1) fullplot: "Rising from the ashes of Nirvana, the Foo Fighters became a Grammy-win…" genres: Array (2) imdb: Object languages: Array (1) lastupdated: "2015-08-19 00:00:25.937000000" num_mflix_comments: 0 plot: "Rising from the ashes of Nirvana, the Foo Fighters became a Grammy-win…" poster: "https://m.media-amazon.com/images/M/MV5BMzE4OTczMTgxM15BMl5BanBnXkFtZT…" released: 2011-04-05T00:00:00.000+00:00 runtime: 150 title: "Foo Fighters: Back and Forth" tomatoes: Object type: "movie" year: 2011
Conéctese a su implementación de MongoDB mongosh usando.
Para obtener más información, consulte Conectarse a un clúster a través de mongosh.
Consulta el releasedAfter2000Index índice parcial.
Nota
El siguiente ejemplo consulta el índice releasedAfter2000Index ejecutando el comando .aggregate en la vista movies_ReleasedAfter2000. Si su clúster ejecuta MongoDB v8.0, debe consultar la colección de origen (por ejemplo, movies) usando el índice de la vista. Actualice a MongoDB v8.1o superior para consultar la vista directamente.
db.movies_ReleasedAfter2000.aggregate([ { $search: { index: "releasedAfter2000Index", text: { path: "title", query: "foo" }, sort: { released: 1 } } } ])
[ { _id: ObjectId('573a13d2f29313caabd929f8'), plot: "Rising from the ashes of Nirvana, the Foo Fighters became a Grammy-winning sensation on their own. Sixteen years of the band's history comes to life in this documentary, from their demo ...", genres: [ 'Documentary', 'Music' ], runtime: 150, cast: [ 'Shawn Cloninger', 'William Goldsmith', 'Jessy Greene', 'Dave Grohl' ], num_mflix_comments: 0, poster: 'https://m.media-amazon.com/images/M/MV5BMzE4OTczMTgxM15BMl5BanBnXkFtZTcwNTU1NjQxOA@@._V1_SY1000_SX677_AL_.jpg', title: 'Foo Fighters: Back and Forth', fullplot: `Rising from the ashes of Nirvana, the Foo Fighters became a Grammy-winning sensation on their own. Sixteen years of the band's history comes to life in this documentary, from their demo tapes through the creation of their 2011 album, "Wasting Light."`, languages: [ 'English' ], released: ISODate('2011-04-05T00:00:00.000Z'), directors: [ 'James Moll' ], awards: { wins: 1, nominations: 1, text: '1 win & 1 nomination.' }, lastupdated: '2015-08-19 00:00:25.937000000', year: 2011, imdb: { rating: 8.4, votes: 3745, id: 1853563 }, countries: [ 'USA' ], type: 'movie', tomatoes: { viewer: { rating: 4.4, numReviews: 857, meter: 96 }, dvd: ISODate('2011-08-08T00:00:00.000Z'), website: 'http://us.foofightersfilm.com/', production: 'Cinedigm Digital Cinema', lastUpdated: ISODate('2015-09-12T18:42:01.000Z') } } ]
El siguiente ejemplo permite buscar alojamientos en la colección sample_airbnb.listingsAndReviews basándose en un nuevo campo totalPrice, que es la suma de los campos price y cleaningFee. Además, como MongoDB Search no admite los tipos Decimal128, transformamos los valores a Double.
Conéctese al clúster mongosh mediante.
Para obtener más información, consulte Conectarse a un clúster a través de mongosh.
En Atlas, ve a la página Clusters de tu proyecto.
Si aún no se muestra, seleccione la organización que contiene su proyecto deseado en el menú Organizations de la barra de navegación.
Si aún no aparece, selecciona el proyecto deseado en el menú Projects de la barra de navegación.
En la barra lateral, haz clic en Clusters en la sección Database.
La página de clústeres se muestra.
En Atlas, vaya a la Search & Vector Search página de su clúster.
Puedes ir a la página de búsqueda de MongoDB desde la opción Search & Vector Search o desde el Data Explorer.
Si aún no aparece, se debe seleccionar la organización que contiene el proyecto en el menú Organizations de la barra de navegación.
Si aún no se muestra, seleccione su proyecto en el menú Projects de la barra de navegación.
En la barra lateral, haz clic en Search & Vector Search en la sección Database.
Si no tienes clústeres, haz clic en Create cluster para crear uno. Para obtener más información, consulta Crear un clúster.
Si el proyecto tiene varios clústeres, se debe seleccionar el clúster que se desea usar en el menú desplegable Select cluster y luego se debe hacer clic en Go to Search.
Aparece la página de Búsqueda y Búsqueda Vectorial.
Si aún no aparece, se debe seleccionar la organización que contiene el proyecto en el menú Organizations de la barra de navegación.
Si aún no se muestra, seleccione su proyecto en el menú Projects de la barra de navegación.
En la barra lateral, haz clic en Data Explorer en la sección Database.
Expanda la base de datos y seleccione la colección.
Haga clic en la pestaña Indexes para la colección.
Haga clic en el enlace Search and Vector Search en el banner.
Aparece la página de Búsqueda y Búsqueda Vectorial.
Haga Create Search Index clic en para iniciar la configuración del índice.
Realiza las siguientes selecciones en la página y luego haz clic en Next.
Search Type | Seleccione el tipo de índice MongoDB Search. |
Index Name and Data Source | Especifique la siguiente información:
|
Configuration Method | Seleccione JSON Editor para editar la definición del índice sin procesar. |
Verifique el estado.
El índice recién creado aparece en la pestaña Atlas Search. Mientras se está construyendo el índice, el campo Status muestra Build in Progress. Cuando se termina de construir el índice, el campo Status muestra Active.
IMPORTANTE: Las colecciones más grandes tardan más tiempo en indexarse. Se recibirá una notificación por correo electrónico cuando el índice haya terminado de construirse.
Ejecute una consulta en el totalPriceIndex índice.
Nota
El siguiente ejemplo consulta el índice totalPriceIndex ejecutando el comando .aggregate en la vista listingsAndReviews_totalPrice. Si su clúster ejecuta MongoDB v8.0, debe consultar la colección de origen (por ejemplo, listingsAndReviews) usando el índice de la vista. Actualice a MongoDB v8.1o superior para consultar la vista directamente.
[ { "$search": { "index": "totalPriceIndex", "range": { "path": "totalPrice", "lte": 300 }, "returnStoredSource": true } } ]
SCORE: 1 _id: "10006546" totalPrice: 115 SCORE: 1 _id: "1001265" totalPrice: 215 SCORE: 1 _id: "10021707" totalPrice: 40 SCORE: 1 _id: "1003530" totalPrice: 270 SCORE: 1 _id: "10038496" totalPrice: 269 SCORE: 1 _id: "10051164" totalPrice: 250 SCORE: 1 _id: "10057447" totalPrice: 50 SCORE: 1 _id: "10057826" totalPrice: 205 SCORE: 1 _id: "10059244" totalPrice: 43 SCORE: 1 _id: "10066928" totalPrice: 140
Conéctese a su implementación de MongoDB mongosh usando.
Para obtener más información, consulte Conectarse a un clúster a través de mongosh.
Ejecute una consulta en el totalPriceIndex índice.
Nota
El siguiente ejemplo consulta el índice totalPriceIndex ejecutando el comando .aggregate en la vista listingsAndReviews_totalPrice. Si su clúster ejecuta MongoDB v8.0, debe consultar la colección de origen (por ejemplo, listingsAndReviews) usando el índice de la vista. Actualice a MongoDB v8.1o superior para consultar la vista directamente.
db.listingsAndReviews_totalPrice.aggregate([ { $search: { index: "totalPriceIndex", range: { path: "totalPrice", lte: 300 }, returnStoredSource: true } } ])
[ { _id: '10006546', totalPrice: 115 }, { _id: '1001265', totalPrice: 215 }, { _id: '10021707', totalPrice: 40 }, { _id: '1003530', totalPrice: 270 }, { _id: '10038496', totalPrice: 269 }, { _id: '10051164', totalPrice: 250 }, { _id: '10057447', totalPrice: 50 }, { _id: '10057826', totalPrice: 205 }, { _id: '10059244', totalPrice: 43 }, { _id: '10066928', totalPrice: 140 }, { _id: '10082422', totalPrice: 60 }, { _id: '10083468', totalPrice: 40 }, { _id: '10084023', totalPrice: 231 }, { _id: '10091713', totalPrice: 231 }, { _id: '10092679', totalPrice: 58 }, { _id: '10096773', totalPrice: 205 }, { _id: '10112159', totalPrice: 90 }, { _id: '10117617', totalPrice: 55 }, { _id: '10120414', totalPrice: 150 }, { _id: '10133554', totalPrice: 121 } ]
Para indexar campos que coincidan con un patrón de nombres, utilice una vista para transformar los datos de modo que los campos a indexar se aniden en un subdocumento. Esto le permite usar asignaciones dinámicas para la ruta del subdocumento, lo que le permite buscar automáticamente todos los campos nuevos con el _type sufijo, sin modificar la definición del índice.
El siguiente View llamado listings_SearchableTypes solo coincide con los nombres de campo que terminan _type en en la sample_airbnb.listingsAndReviews colección. En concreto, la $set etapa añade un nuevo campo searchable_types llamado, que contiene los campos filtrados con el término _type en el nombre. El $arrayToObject contiene la entrada del filtro (documento completo) y la condición (coincidencia de expresión regular _type para).
Conéctese al clúster usando mongosh.
Para obtener más información, consulte Conectarse a un clúster a través de mongosh.
Crea una vista listings_SearchableTypes llamada.
1 db.createView( 2 "listings_SearchableTypes", 3 "listingsAndReviews", 4 [ 5 { 6 "$set": { 7 "searchable_types": { 8 "$arrayToObject": { 9 "$filter": { 10 "input": { "$objectToArray": "$$ROOT" }, 11 "cond": { 12 "$regexMatch": { 13 "input": "$$this.k", 14 "regex": /_type$/ 15 } 16 } 17 } 18 } 19 } 20 } 21 } 22 ] 23 )
En Atlas, ve a la página Clusters de tu proyecto.
Si aún no se muestra, seleccione la organización que contiene su proyecto deseado en el menú Organizations de la barra de navegación.
Si aún no aparece, selecciona el proyecto deseado en el menú Projects de la barra de navegación.
En la barra lateral, haz clic en Clusters en la sección Database.
La página de clústeres se muestra.
En Atlas, vaya a la Search & Vector Search página de su clúster.
Puedes ir a la página de búsqueda de MongoDB desde la opción Search & Vector Search o desde el Data Explorer.
Si aún no aparece, se debe seleccionar la organización que contiene el proyecto en el menú Organizations de la barra de navegación.
Si aún no se muestra, seleccione su proyecto en el menú Projects de la barra de navegación.
En la barra lateral, haz clic en Search & Vector Search en la sección Database.
Si no tienes clústeres, haz clic en Create cluster para crear uno. Para obtener más información, consulta Crear un clúster.
Si el proyecto tiene varios clústeres, se debe seleccionar el clúster que se desea usar en el menú desplegable Select cluster y luego se debe hacer clic en Go to Search.
Aparece la página de Búsqueda y Búsqueda Vectorial.
Si aún no aparece, se debe seleccionar la organización que contiene el proyecto en el menú Organizations de la barra de navegación.
Si aún no se muestra, seleccione su proyecto en el menú Projects de la barra de navegación.
En la barra lateral, haz clic en Data Explorer en la sección Database.
Expanda la base de datos y seleccione la colección.
Haga clic en la pestaña Indexes para la colección.
Haga clic en el enlace Search and Vector Search en el banner.
Aparece la página de Búsqueda y Búsqueda Vectorial.
Haga Create Search Index clic en para iniciar la configuración del índice.
Realiza las siguientes selecciones en la página y luego haz clic en Next.
Search Type | Seleccione el tipo de índice MongoDB Search. |
Index Name and Data Source | Especifique la siguiente información:
|
Configuration Method | Seleccione JSON Editor para editar la definición del índice sin procesar. |
Editar la definición del índice.
Copie y pegue la siguiente definición de índice para reemplazar la definición de índice predeterminada en la interfaz de usuario:
{ "analyzer": "lucene.standard", "searchAnalyzer": "lucene.standard", "mappings": { "dynamic": false, "fields": { "searchable_types": [ { "dynamic": { "typeSet": "tokenTypeSet" }, "type": "document" } ] } }, "typeSets": [ { "name": "tokenTypeSet", "types": [ { "type": "token" } ] } ] }
Verifique el estado.
El índice recién creado aparece en la pestaña Atlas Search. Mientras se está construyendo el índice, el campo Status muestra Build in Progress. Cuando se termina de construir el índice, el campo Status muestra Active.
IMPORTANTE: Las colecciones más grandes tardan más tiempo en indexarse. Se recibirá una notificación por correo electrónico cuando el índice haya terminado de construirse.
Consultar la vista.
La siguiente consulta busca house en la vista listings_SearchableTypes con un private room. Para ejecutarla, copie y pegue la consulta y haga clic en Search:
[ { "$search": { "index": "listingsSearchableTypes", "compound": { "should": [ { "text": { "path": "searchable_types.property_type", "query": "House" } }, { "text": { "path": "searchable_types.room_type", "query": "Private room" } } ] } } } ]
SCORE: 2.0530142784118652 _id: "10051164" name: "Catete's Colonial Big Hause Room B", searchable_types: Object property_type: 'House', room_type: 'Private room', bed_type: 'Real Bed' SCORE: 2.0530142784118652 _id: "1016739" name: 'Private Room (2) in Guest House at Coogee Beach', searchable_types: Object property_type: 'House', room_type: 'Private room', bed_type: 'Real Bed' SCORE: 2.0530142784118652 _id: "10324377" name: 'Suíte em local tranquilo e seguro', searchable_types: Object property_type: 'House', room_type: 'Private room', bed_type: 'Real Bed' SCORE: 2.0530142784118652 _id: "1073607" name: 'Bright Inner West Terrace Value+', searchable_types: Object property_type: 'House', room_type: 'Private room', bed_type: 'Real Bed' SCORE: 2.0530142784118652 _id: "1077686" name: 'BALAT', searchable_types: Object property_type: 'House', room_type: 'Private room', bed_type: 'Real Bed' SCORE: 2.0530142784118652 _id: "10990260" name: 'The Executive Posh Room', searchable_types: Object property_type: 'House', room_type: 'Private room', bed_type: 'Real Bed' SCORE: 2.0530142784118652 _id: "10992286" name: 'Holoholo Inn: Rain Forest (Priv-2)', searchable_types: Object property_type: 'House', room_type: 'Private room', bed_type: 'Real Bed' SCORE: 2.0530142784118652 _id: "11396243" name: 'Beautiful Ensuite Room -Easy access to city', searchable_types: Object property_type: 'House', room_type: 'Private room', bed_type: 'Real Bed' SCORE: 2.0530142784118652 _id: "1145567" name: 'ROOM + ENSUITE INNER CITY MOD HOUSE', searchable_types: Object property_type: 'House', room_type: 'Private room', bed_type: 'Real Bed' SCORE: 2.0530142784118652 _id: "11464859" name: 'The Sassy Lilac Megan Love Room', searchable_types: Object property_type: 'House', room_type: 'Private room', bed_type: 'Real Bed'
Conéctese a su implementación de MongoDB mongosh usando.
Para obtener más información, consulte Conectarse a un clúster a través de mongosh.
Cree un índice de búsqueda de MongoDB en la vista.
La siguiente definición de índice en el View llamado listingsSearchableTypes configura un typeSet para indexar automáticamente todos los campos del documento searchable_types como tipo string. Si agrega nuevos campos que coincidan con este patrón, MongoDB Search también los indexará automáticamente.
db.listings_SearchableTypes.createSearchIndex( "listingsSearchableTypes", { "analyzer": "lucene.standard", "searchAnalyzer": "lucene.standard", "mappings": { "dynamic": false, "fields": { "searchable_types": [ { "type": "document", "dynamic": { "typeSet": "tokenTypeSet" } } ] } }, "typeSets": [ { "name": "tokenTypeSet", "types": [ { "type": "token" } ] } ] } )
Ejecute una consulta en el totalPriceIndex índice.
Nota
El siguiente ejemplo consulta el índice listingsSearchableTypes ejecutando el comando .aggregate en la vista listings_SearchableTypes. Si su clúster ejecuta MongoDB v8.0, debe consultar la colección de origen (por ejemplo, listingsAndReviews) usando el índice de la vista. Actualice a MongoDB v8.1o superior para consultar la vista directamente.
La siguiente consulta busca en la vista denominada listings_SearchableTypes house con un private room.
db.listings_SearchableTypes.aggregate([ { "$search": { "index": "listingsSearchableTypes", "compound": { "should": [ { "equals": { "path": "searchable_types.property_type", "value": "House" } }, { "equals": { "path": "searchable_types.room_type", "value": "Private room" } } ] } } }, { "$limit": 10 }, { "$project": { "_id": 0, "searchable_types": 1, "name": 1 } } ])
[ { name: "Catete's Colonial Big Hause Room B", searchable_types: { property_type: 'House', room_type: 'Private room', bed_type: 'Real Bed' } }, { name: 'Private Room (2) in Guest House at Coogee Beach', searchable_types: { property_type: 'House', room_type: 'Private room', bed_type: 'Real Bed' } }, { name: 'Suíte em local tranquilo e seguro', searchable_types: { property_type: 'House', room_type: 'Private room', bed_type: 'Real Bed' } }, { name: 'Bright Inner West Terrace Value+', searchable_types: { property_type: 'House', room_type: 'Private room', bed_type: 'Real Bed' } }, { name: 'BALAT', searchable_types: { property_type: 'House', room_type: 'Private room', bed_type: 'Real Bed' } }, { name: 'The Executive Posh Room', searchable_types: { property_type: 'House', room_type: 'Private room', bed_type: 'Real Bed' } }, { name: 'Holoholo Inn: Rain Forest (Priv-2)', searchable_types: { property_type: 'House', room_type: 'Private room', bed_type: 'Real Bed' } }, { name: 'Beautiful Ensuite Room -Easy access to city', searchable_types: { property_type: 'House', room_type: 'Private room', bed_type: 'Real Bed' } }, { name: 'ROOM + ENSUITE INNER CITY MOD HOUSE', searchable_types: { property_type: 'House', room_type: 'Private room', bed_type: 'Real Bed' } }, { name: 'The Sassy Lilac Megan Love Room', searchable_types: { property_type: 'House', room_type: 'Private room', bed_type: 'Real Bed' } } ]
Editar una vista
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.
Devolver las tuberías para una vista
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') ] } } } ]
Consideraciones sobre el rendimiento
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.
Solucionar problemas
Los índices cambian a FAILED
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 a STALE
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
READYde agregación mientras un índice es, esteSTALEse convierte en. El índice volverá aREADYdespués de resolver el documento o modificar la definición de la vista para que no vuelva a fallar.STALESi 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á aREADYdespué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.
Error: $search solo es válido como primera etapa de una canalización
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.
Proceso de índice
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:
Crea índices de búsqueda de MongoDB según las reglas de la definición de índice de la colección.
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.
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.
Obtén más información
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.