Si ha configurado el OpciónstoredSource en la definición de índice para una colección, MongoDB Search almacena los campos especificados en mongotPuede utilizar la opción booleana returnStoredSource en sus consultas de búsqueda de MongoDB para recuperar solo esos campos, en lugar de buscar documentos completos de la colección.
De forma predeterminada, MongoDB Search realiza una búsqueda completa de documentos de forma implícita en la base de datos backend después de que MongoDB Search encuentre los documentos para la consulta. Esta búsqueda podría reducir significativamente el rendimiento en las etapas posteriores del flujo de agregación que recuperan todos los conjuntos de datos coincidentes de la etapa $search (como $sort$group,) o filtrar una gran parte (como,). Si configuró $match $skipla storedSource opción, puede usar la returnStoredSource opción para recuperar solo partes de los documentos almacenados directamente en MongoDB Search y evitar la búsqueda completa de documentos en la base de datos. Esto le permite realizar la mayoría de las operaciones de filtrado de la base de datos en documentos con un número mínimo de campos. Posteriormente, puede recuperar todos los campos de los documentos $lookup mediante.
Nota
returnStoredSourcesolo está disponible en clústeres que ejecutan MongoDB 7.0 y versiones posteriores.Para las colecciones fragmentadas, solo está disponible en clústeres que ejecutan
$lookupMongoDB 5.1 y versiones posteriores.
Sintaxis
returnStoredSource tiene la siguiente sintaxis en tus consultas:
{ $search: { "<operator>": { <operator-specification> }, "returnStoredSource": true | false // optional, defaults to "false" } }
Para obtener más información sobre la sintaxis de consulta,$search consulte.
Comportamiento
La returnStoredSource opción booleana especifica si MongoDB Search debe realizar una búsqueda completa del documento en la base de datos o devolver los campos almacenados directamente desde MongoDB Search. Puede usar la returnStoredSource opción solo si la definición de su índice incluye la configuración para almacenar campos en MongoDB Search. Para obtener más información sobre el almacenamiento de campos en MongoDB Search, consulte Referencia de índices y Definir campos de origen almacenados en su índice de MongoDB Search.
Puede establecer uno de los siguientes valores para la opción returnStoredSource:
true- para devolver únicamente los campos de origen almacenados directamente desde la búsqueda de MongoDBfalse- para realizar una búsqueda implícita de documento completo en la base de datos backend (predeterminado)
Si ejecuta consultas de búsqueda de MongoDB con la opción booleana returnStoredSource establecida en true:
MongoDB Search devuelve un documento vacío si el documento no incluye los campos configurados para el almacenamiento.
La búsqueda de MongoDB devuelve errores si la definición del índice no incluye la configuración de la fuente almacenada.
Es posible que la búsqueda de MongoDB devuelva datos obsoletos debido a un retraso en la replicación.
La búsqueda de MongoDB podría devolver datos duplicados en clústeres fragmentados.
Si realiza un gran volumen y una alta tasa de operaciones de inserción y actualización de datos para su colección en la base de datos backend, MongoDB Search podría devolver datos obsoletos debido a que los datos almacenados en mongot podrían no estar actualizados debido a un retraso en la replicación. Puede ver el número aproximado de milisegundos que MongoDB Search tarda en replicar los cambios en el registro de operaciones de en la mongod interfaz de usuario de Atlas. Para obtener más información, consulte Revisar las métricas de MongoDB Search.
Si hay documentos huérfanos durante la migración de fragmentos, MongoDB Search podría devolver documentos duplicados para las consultas en el clúster fragmentado.
Uso de muestra
Si tu etapa $search descarta muchos de los resultados y necesitas realizar una búsqueda implícita de documentos en tu base de datos, te recomendamos usar la opción returnStoredSource. Puedes almacenar los campos necesarios para ordenar o filtrar y usar la opción returnStoredSource para realizar las siguientes acciones:
Operaciones intermedias sobre documentos parciales devueltos por MongoDB Search
$lookupal final del proceso si se necesitan documentos completos.
Importante
Para mayor eficiencia, configure solo un número mínimo de campos para el almacenamiento en MongoDB Search. Use esta opción si sus documentos son lo suficientemente grandes como para causar problemas durante la búsqueda.
Ejemplos
Los ejemplos de esta sección utilizan la colección sample_mflix.movies. Los ejemplos muestran cómo realizar un ordenamiento o emparejamiento en los documentos que MongoDB Search devuelve después de la etapa $search y luego buscar documentos en la base de datos.
Crea el índice usando la siguiente definición de índice. La definición de índice para la colección especifica los siguientes campos:
Campo de índice
titleAlmacenar los campos
yearytitle
{ "mappings": { "fields": { "title": { "type": "string" } } }, "storedSource": { "include": [ "year", "title" ] } } Ejecute la siguiente consulta contra la colección:
db.movies.aggregate([ { // search and output documents $search: { "text": { "query": "baseball", "path": "title" }, "returnStoredSource": true // return stored fields only } }, // fetch all matched dataset from $search stage and sort it { $sort: {"year": 1, "title": 1} }, // discard everything except top 10 results { $limit: 10 }, // perform full document lookup for top 10 documents only { $lookup: { from: "movies", localField: "_id", foreignField: "_id", as: "document" } } ]) La query devuelve los siguientes documentos:
1 [ 2 { 3 _id: ObjectId("573a1399f29313caabced370"), 4 title: 'Mr. Baseball', 5 year: 1992, 6 document: [ 7 { ... } // full document returned by $lookup 8 ] 9 }, 10 { 11 _id: ObjectId("573a1399f29313caabcee1aa"), 12 title: 'Baseball', 13 year: 1994, 14 document: [ 15 { ... } // full document returned by $lookup 16 ] 17 } 18 ]
Crea el índice usando la siguiente definición de índice. La definición de índice para la colección especifica los siguientes campos:
Campo de índice
titleAlmacenar los campos
imdb.ratingyimdb.votes
{ "mappings": { "fields": { "title": { "type": "string" } } }, "storedSource": { "include": [ "imdb.rating", "imdb.votes" ] } } Ejecute la siguiente consulta contra la colección:
db.movies.aggregate([ { // search and output documents $search: { "text": { "query": "baseball", "path": "title" }, "returnStoredSource": true // return stored fields only } }, // filter dataset from $search stage using $match { $match: {$or: [ { "imdb.rating": { $gt: 8.2 } }, { "imdb.votes": { $gte: 4500 } } ]} }, // perform full document lookup for matched documents only { $lookup: { from: "movies", localField: "_id", foreignField: "_id", as: "document" } } ]) La query devuelve los siguientes documentos:
1 [ 2 { 3 _id: ObjectId("573a1399f29313caabcee1aa"), 4 imdb: { rating: 9.1, votes: 2460 }, 5 document: [ 6 { ... } // full document returned by $lookup 7 ] 8 }, 9 { 10 _id: ObjectId("573a1399f29313caabced370"), 11 imdb: { rating: 5.8, votes: 7617 }, 12 document: [ 13 { ... } // full document returned by $lookup 14 ] 15 } 16 ]