Menu Docs
Página inicial do Docs
/
Atlas
/ / / /

Devolver campos de origem armazenados

Se você configurou a opçãostoredSource na definição de índice para uma coleção, o MongoDB Search armazenará os campos especificados mongot no. Você pode usar a opção returnStoredSource boolean em suas queries do MongoDB Search para recuperar apenas esses campos, em vez de buscar documentos completos da collection.

Por padrão, o MongoDB Search realiza a pesquisa completa de documento implicitamente no banco de dados de backend depois que o MongoDB Search corresponde aos documentos para a query. Essa pesquisa pode degradar significativamente o desempenho dos estágios subsequentes do pipeline de agregação que obtêm todo o conjunto de dados correspondente do estágio $search (como $sort, $group) ou filtram uma grande parte dele (como $match $skip,). Se você configurou a storedSource opção, você poderá usar a returnStoredSource opção para recuperar apenas partes dos documentos armazenados diretamente no MongoDB Search e evitar a pesquisa completa de documento no banco de dados. Isso permite que você realize a maioria das operações de filtragem do lado do banco de dados em documentos com um número mínimo de campos. Você pode então recuperar todos os campos dos documentos em um estágio posterior do pipeline $lookup usando.

Observação

  • returnStoredSource está disponível apenas em clusters Atlas que executam o MongoDB 7.0 e versões posteriores.

  • Para collections fragmentadas, o $lookup está disponível somente em clusters Atlas que executam o MongoDB 5.1 e posterior.

returnStoredSource tem a seguinte sintaxe em suas queries:

{
$search: {
"<operator>": {
<operator-specification>
},
"returnStoredSource": true | false // optional, defaults to "false"
}
}

Para saber mais sobre sintaxe de query, consulte $search.

A returnStoredSource opção booleana especifica se o MongoDB Search deve executar uma pesquisa completa de documento no banco de dados ou retornar os campos armazenados diretamente do MongoDB Search. Você pode usar a returnStoredSource opção somente se a definição do índice incluir a configuração para armazenar campos no MongoDB Search. Para saber mais sobre como armazenar campos na MongoDB Search, consulte Referência de índice e Definir campos de origem armazenados no seu índice do MongoDB Search.

Você pode definir um dos seguintes valores para a opção returnStoredSource :

  • true - para retornar apenas campos de origem armazenados diretamente da Pesquisa MongoDB

  • false - para fazer uma pesquisa implícita de documento completo no reconhecimento de data center de backend (padrão)

Se você executar queries de pesquisa MongoDB com a opção booleana returnStoredSource definida como true:

  • A Pesquisa do MongoDB retornará um documento vazio se o documento não incluir os campos configurados para armazenamento.

  • A Pesquisa do MongoDB retorna erros se a definição do índice não incluir a configuração Fonte armazenada.

  • A pesquisa do MongoDB pode retornar dados obsoletos devido a um atraso de replicação.

  • A Pesquisa do MongoDB pode retornar dados duplicados em clusters fragmentados.

Se você executar um alto volume e taxa de operações de inserção e atualização de dados para sua coleção no banco de dados de backend, o MongoDB Search poderá retornar dados obsoletos porque os dados armazenados no mongot podem não ser atuais devido a um atraso de replicação. Você pode visualizar o número aproximado de milissegundos que a pesquisa do MongoDB está atrasada ao replicar as alterações do oplog de mongod na UI do Atlas . Para saber mais, consulte Revisar métricas de pesquisa do MongoDB .

Se houver documentos órfãos durante a migração de chunk, a Pesquisa do MongoDB poderá retornar documentos duplicados para queries em cluster fragmentado.

Se o estágio $search descartar muitos resultados e você precisar realizar uma pesquisa implícita de documentos no seu banco de dados, recomendamos usar a opção returnStoredSource . Você pode armazenar os campos necessários para classificação ou filtragem e usar a opção returnStoredSource no momento da query para executar as seguintes ações:

  1. Operações intermediárias em documentos parciais retornados pela pesquisa MongoDB

  2. $lookup no final do pipeline, se forem necessários documentos completos.

Importante

Para maior eficiência, configure apenas um número mínimo de campos para armazenamento no MongoDB Search. Use essa opção se seus documentos forem grandes o suficiente para causar problemas durante a pesquisa.

Os exemplos nesta seção utilizam a collection sample_mflix.movies. Os exemplos mostram como fazer uma classificação ou correspondência nos documentos que o MongoDB Search retorna após o estágio $search e, em seguida, pesquisar documentos no banco de dados.

  1. Crie o índice utilizando a seguinte definição de índice. A definição de índice para a collection especifica os seguintes campo:

    • Campo de índice title

    • Armazenar campos year e title

    {
    "mappings": {
    "fields": {
    "title": {
    "type": "string"
    }
    }
    },
    "storedSource": {
    "include": [
    "year",
    "title"
    ]
    }
    }
  2. Execute a seguinte query em relação à collection:

    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"
    }
    }
    ])

    A consulta retorna os seguintes 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. Crie o índice utilizando a seguinte definição de índice. A definição de índice para a collection especifica os seguintes campo:

    • Campo de índice title

    • Armazenar campos imdb.rating e imdb.votes

    {
    "mappings": {
    "fields": {
    "title": {
    "type": "string"
    }
    }
    },
    "storedSource": {
    "include": [
    "imdb.rating",
    "imdb.votes"
    ]
    }
    }
  2. Execute a seguinte query em relação à collection:

    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"
    }
    }
    ])

    A consulta retorna os seguintes 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]

Voltar

concurrent

Nesta página