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

Consulte, filtre e recupere arrays de objetos

Você pode usar a opção returnScope para definir o contexto da query e retornar arrays de objetos como documentos individuais.

Para recuperar objetos aninhados como documentos individuais usando returnScope, você deve:

  • Índice as arrays de objetos como o tipo embeddedDocuments.

  • Defina storedSource para os campos aninhados que você deseja recuperar. A pesquisa do MongoDB retorna apenas os campos definidos no storedSource.

  • Defina a opção returnStoredSource como true na query.

returnScope tem a seguinte sintaxe em suas queries:

{
$search: {
"<operator>": {
<operator-specification>,
},
"returnScope": {
"path": "<embedded-documents-field-to-retrieve>"
},
"returnStoredSource": true
}
}
{
$searchMeta: {
"returnScope": {
"path": "<embedded-documents-field-to-retrieve>"
},
"returnStoredSource": true
},
"facet": {
"<operator>": {
<operator-specification>,
},
"facets": {
<facet-definition>
}
}
}

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

A opção returnScope define o contexto de recuperação para a query. Se você especificar returnScope em sua query, o MongoDB Search pontua, classifica e conta cada documento incorporado como se fosse um documento individual.

Quando você usa a opção returnScope, o MongoDB pesquisa retorna apenas os campos que você configurou como storedSource dentro do embeddedDocument. Os campos fora do caminho embeddedDocument (como os campos no nível da raiz) e os campos que não estão configurados como storedSource não são retornados.

Na especificação do operador, você deve especificar o caminho completo para o campo que deseja fazer a query. Ao usar a opção returnScope, você deve garantir que todos os caminhos de especificações do operador estejam aninhados em returnScope.path. Para fazer query em um campo fora do returnScope.path, você deve usar o operador hasAncestor ou hasRoot. Para aprender mais, consulte:

When you use returnScope in a query, MongoDB Search populates a searchRootDocumentId metadata field. You can use the searchRootDocumentId metadata field on clusters running MongoDB 8.3 or later. This field contains the identifier of the root document that contains each returned embedded document. To project this value, use the $meta expression with the searchRootDocumentId keyword.

MongoDB Search populates searchRootDocumentId only when your query sets both returnStoredSource: true and returnScope.path. If you reference searchRootDocumentId in a query that does not specify returnScope, the query fails with the following error:

query requires $search root document id metadata, but it is not
available

Use searchRootDocumentId if you want to:

  • Fetch fields from the parent document after filtering on the child documents.

  • Group child documents by their parent.

Don't use searchRootDocumentId if:

  • You need only fields from the matched child documents.

  • You want to return the parent document for every child document in the result set, since this can be expensive.

Os exemplos a seguir demonstram como usar a opção returnScope em consultas. Os exemplos usam o conjunto de dados de amostra sample_training.companies. Se você carregar os dados no seu cluster e criar o índice de amostra nos campos da coleção, poderá tentar as seguintes consultas nos dados de amostra.

1{
2 "mappings": {
3 "dynamic": false,
4 "fields": {
5 "funding_rounds": {
6 "type": "embeddedDocuments",
7 "dynamic": true,
8 "fields": {
9 "investments": {
10 "type": "embeddedDocuments",
11 "dynamic": true
12 }
13 },
14 "storedSource": {
15 "include": [
16 "round_code",
17 "raised_currency_code",
18 "raised_amount",
19 "investments.person",
20 "investments.financial_org"
21 ]
22 }
23 }
24 }
25 }
26}

A definição de índice anterior configura a pesquisa do MongoDB para:

  • Indexe os campos funding_rounds e funding_rounds.investments como o tipo embeddedDocuments.

  • Indexe todos os campos indexáveis dinamicamente aninhados no array de objetos funding_rounds e funding_rounds.investments.

  • Armazene os seguintes campos em mongot:

    • funding_rounds.round_code

    • funding_rounds.raised_currency_code

    • funding_rounds.raised_amount

    • funding_rounds.investments.person

    • funding_rounds.investments.financial_org

Você pode usar o embeddedDocument Operador para realizar queries elemento a elemento em ambos os campos funding_rounds e funding_rounds.investments. As seções a seguir demonstram algumas queries de amostra que usam a opção returnScope para recuperar os campos embeddedDocuments como documentos individuais.

Estrutura de documento de amostra da coleção sample_training.companies
{
...,
"funding_rounds": [
{
"id": <integer>,
"round_code": "<string>",
"source_url": "<string>",
"source_description": "<string>",
"raised_amount": <integer>,
"raised_currency_code": "<string>",
"funded_year": <integer>,
"funded_month": "<string>",
"funded_day": "<string>",
"investments": [
{
"company": "<string>",
"financial_org": {
"name": "<string>",
"permalink": "<string>"
},
"person": {
"first_name": "<string>",
"last_name": "<string>",
"permalink": "<string>"
}
},
...
]
},
...
],
...
}

As seções seguintes demonstram queries de exemplo que usam a opção returnScope para recuperar campos em campos do tipo embeddedDocuments que foram armazenados em mongot.

Voltar

searchSequenceToken

Nesta página