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

Devolver los campos de origen almacenados

Si ha configurado la storedSource opción en la definición del índice para una colección, MongoDB Search almacena los campos especificados en mongot. Puedes utilizar la opción booleana returnStoredSource en tus consultas de MongoDB Search para recuperar solo esos campos, en lugar de obtener 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 encuentra documentos para la query. Esta búsqueda podría degradar significativamente el rendimiento de las etapas del pipeline de agregación que extraen todos los datos coincidentes de la etapa $search (como por ejemplo $sort, $group) o filtrar una gran parte de ella (como $match, $skip). Si ha configurado la opción storedSource, puede utilizar la opción returnStoredSource para recuperar solo partes de los documentos almacenados directamente en MongoDB Search y evitar la búsqueda de documentos completos en la base de datos. Esto le permite realizar la mayoría de las operaciones de filtrado del lado de la base de datos en documentos con una cantidad mínima de campos. Luego puedes recuperar todos los campos de los documentos en una fase posterior de la pipeline utilizando $lookup.

Nota

  • returnStoredSource solo está disponible en tus clústeres que ejecutan MongoDB 7.0 y versiones posteriores.

  • Para colecciones particionadas, $lookup solo está disponible en clústeres que ejecutan MongoDB 5.1 y versiones posteriores.

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 query, consulta $search.

La opción booleana returnStoredSource especifica si MongoDB Search debe realizar una búsqueda completa de documentos en la base de datos o devolver los campos almacenados directamente desde MongoDB Search. Puede utilizar la opción returnStoredSource sólo si la definición del índice incluye la configuración para el almacenamiento de campos en MongoDB Search. Para obtener más información sobre cómo almacenar campos en MongoDB Search, consulta Referencia del índice y Define Stored Source Fields in Your MongoDB Search Index.

Puedes establecer uno de los siguientes valores para la opción returnStoredSource:

  • true - para devolver solo los campos de origen almacenados directamente desde MongoDB Search

  • false - realizar una búsqueda implícita de documento completo en la base de datos backend (por defecto)

Si ejecuta consultas de búsqueda de MongoDB Search con la opción booleana returnStoredSource establecida en true:

  • MongoDB Search devuelve un documento vacío si este no incluye los campos configurados para el almacenamiento.

  • MongoDB Search devuelve errores si la definición del índice no incluye la configuración de Fuente almacenada.

  • MongoDB Search podría devolver datos obsoletos debido a un atraso de la replicación.

  • MongoDB Search podría devolver datos duplicados en clústeres particionados.

If you perform a high volume and rate of data insert and update operations for your collection on the backend database, MongoDB Search might return stale data because the data stored on mongot might not be current due to a replication lag. You can view the approximate number of milliseconds that MongoDB Search is behind in replicating changes from the oplog of mongod in the Atlas UI. To learn more, see Review MongoDB Search Metrics.

Si hay documentos huérfanos durante la migración de fragmentos, MongoDB Search podría devolver documentos duplicados en las consultas a clústeres fragmentados.

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:

  1. Operaciones intermedias en documentos parciales devueltos por MongoDB Search

  2. $lookup al final del pipeline si se necesitan documentos completos.

Importante

Para mayor eficiencia, configura solo un número mínimo de campos para su almacenamiento en MongoDB Search. Utiliza esta opción si tus documentos son lo suficientemente grandes como para causar problemas durante la búsqueda.

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.

  1. 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 title

    • Guarde los campos year y title

    {
    "mappings": {
    "fields": {
    "title": {
    "type": "string"
    }
    }
    },
    "storedSource": {
    "include": [
    "year",
    "title"
    ]
    }
    }
  2. Ejecuta la siguiente query en 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]
  1. 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 title

    • Guarde los campos imdb.rating y imdb.votes

    {
    "mappings": {
    "fields": {
    "title": {
    "type": "string"
    }
    }
    },
    "storedSource": {
    "include": [
    "imdb.rating",
    "imdb.votes"
    ]
    }
    }
  2. Ejecuta la siguiente query en 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]

Volver

simultáneo

En esta página