Definição
Sintaxe
hasRoot tem a seguinte sintaxe:
1 { 2 $search: { 3 "index": "<index name>", // optional, defaults to "default" 4 "hasRoot": { 5 "operator": { 6 <operator-specification> 7 } 8 }, 9 "returnScope": { 10 "path": "<embedded-documents-field-to-retrieve>" 11 }, 12 "returnStoredSource": true, 13 } 14 }
Campos
Campo | Tipo | Descrição | necessidade |
|---|---|---|---|
| Objeto | Operador a ser usado para consultar um campo indexado. Isso especifica os critérios de pesquisa para filtrar os documentos secundários. | Obrigatório |
Requisitos
Para usar este operador, você deve fazer o seguinte na definição do índice:
Indexe o campo no nível-raiz que você deseja para a query.
Indexe o array de objetos que você deseja recuperar como o tipo
embeddedDocuments. Você também deve configurarstoredSourcepara campos aninhados que deseja recuperar.
Na query, você deve fazer o seguinte:
Especifique
returnScopepara definir o escopo do campo a ser pesquisado pelo operador.Defina
returnStoredSourceparatruepara retornar os camposstoredSource.
Exemplos
Os exemplos desta seção usam o namespace sample_training.companies. Se você carregar o conjunto de dados de amostra e criar o índice na coleção, pode tentar as queries de amostra demonstradas nesta seção.
Índice de amostra
As queries nesta seção usam o seguinte índice. Esta definição de índice configura o MongoDB Search para fazer o seguinte:
Indexe automaticamente todos os campos dinamicamente indexáveis na coleção.
Indexe os campos
products,funding_roundsefunding_rounds.investmentscomo o tipo embeddedDocuments.Armazene os seguintes campos em
mongot:funding_rounds.raised_currency_codefunding_rounds.raised_amountfunding_rounds.investmentsproducts.name
1 { 2 "mappings": { 3 "dynamic": true, 4 "fields": { 5 "funding_rounds": { 6 "dynamic": true, 7 "fields": { 8 "investments": [ 9 { 10 "dynamic": true, 11 "type": "embeddedDocuments" 12 } 13 ] 14 }, 15 "storedSource": { 16 "include": [ 17 "raised_currency_code", 18 "raised_amount", 19 "investments" 20 ] 21 }, 22 "type": "embeddedDocuments" 23 }, 24 "products": { 25 "dynamic": true, 26 "storedSource": { 27 "include": [ 28 "name" 29 ] 30 }, 31 "type": "embeddedDocuments" 32 } 33 } 34 } 35 }
Consulta Simples
A query a seguir retorna products onde o campo de nível-raiz founded_year está entre os anos 2005 e 2010.
1 db.companies.aggregate([ 2 { 3 "$search": { 4 "returnStoredSource": true, 5 "returnScope": { "path": "products" }, 6 "hasRoot": { 7 "operator": { 8 "range": { 9 "path": "founded_year", 10 "gte": 2005, 11 "lte": 2010 12 } 13 } 14 } 15 } 16 } 17 ])
Consulta Multinível
A consulta a seguir pesquisa no campo name para a empresa nomeada Facebook usando o operador text para recuperar o valor investido (funding_rounds.raised_amount e funding_rounds.raised_currency_code) por todos os investidores (investments.person e investments.financial_org) da empresa.
1 db.companies.aggregate([ 2 { 3 "$search": { 4 "returnStoredSource": true, 5 "returnScope": { "path": "funding_rounds" }, 6 "hasRoot": { 7 "operator": { 8 "text": { 9 "path": "name", 10 "query": "Facebook" 11 } 12 } 13 } 14 } 15 } 16 ])
query composta
A query a seguir pesquisa no campo funding_rounds.investments aninhado organizações financeiras com o termo Ventures (em qualquer lugar do campo name) que investiram em empresas descritas usando o termo network (em qualquer lugar do campo description). A query usa o operador composto para pesquisar:
Campo
funding_rounds.investments.financial_org.nameaninhado usando o operadorembeddedDocumentCampo
descriptionde nível-raiz usando o operadorhasRoot
O returnScope define o contexto para os operadores no campo do tipo funding_rounds embeddedDocuments e o campo returnStoredSource é configurado como true para retornar apenas os campos storedSource. A query limita os resultados a 5 documentos.
1 db.companies.aggregate([ 2 { 3 "$search": { 4 "compound": { 5 "should": [ 6 { 7 "embeddedDocument": { 8 "path": "funding_rounds.investments", 9 "operator": { 10 "wildcard": { 11 "path": "funding_rounds.investments.financial_org.name", 12 "query": "*Ventures*", 13 "allowAnalyzedField": true 14 } 15 } 16 } 17 }, 18 { 19 "hasRoot": { 20 "operator": { 21 "wildcard": { 22 "path": "description", 23 "query": "*network*", 24 "allowAnalyzedField": true 25 } 26 } 27 } 28 } 29 ] 30 }, 31 "returnScope": {"path": "funding_rounds"}, 32 "returnStoredSource": true 33 } 34 }, 35 { 36 "$limit": 5 37 } 38 ])