Definición
Sintaxis
hasRoot tiene la siguiente sintaxis:
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 | Descripción | Necesidad |
|---|---|---|---|
| Objeto | Operador para utilizar en la query de un campo indexado. Esto especifica los criterios de búsqueda para filtrar los documentos secundarios. | Requerido |
Requisitos
Para utilizar este operador, debes realizar lo siguiente en la definición del índice:
Indexa el campo de nivel raíz que quieres query.
Indexa el arreglo de objetos que deseas recuperar con el tipo
embeddedDocuments. También debe configurarstoredSourcepara los campos anidados que desea recuperar.
En la query, debes hacer lo siguiente:
Especifique
returnScopepara definir o escopo do campo na búsqueda pelo operador.Establece
returnStoredSourceentruepara devolver los camposstoredSource.
Ejemplos
Los ejemplos en esta sección utilizan el namespace sample_training.companies. Si cargas el conjunto de datos de muestra y creas el índice en la colección, puedes probar las consultas de muestra que se muestran en esta sección.
Índice de muestra
Las consultas de esta sección utilizan el siguiente índice. Esta definición de índice configura MongoDB Search para que haga lo siguiente:
Indexe automáticamente todos los campos indexables dinámicos en la colección.
Índice los campos
products,funding_roundsyfunding_rounds.investmentscomo el tipo embeddedDocuments.Almacena los siguientes campos en
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 }
Query simple
La siguiente consulta devuelve products donde el campo de nivel raíz founded_year se encuentra entre los años 2005 y 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 ])
Multi-Level query
La siguiente query busca en el campo name la empresa denominada Facebook utilizando el operador text para recuperar el monto invertido (funding_rounds.raised_amount y funding_rounds.raised_currency_code) por todos los inversores (investments.person y investments.financial_org) en la 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 ])
Compound query
La siguiente query busca en el campo anidado funding_rounds.investments organizaciones financieras con el término Ventures (en cualquier parte del campo name) que hayan invertido en empresas descritas con el término network (en cualquier parte del campo description). La query utiliza el operador compuesto para buscar en:
Campo anidado
funding_rounds.investments.financial_org.nameusando el operadorembeddedDocumentCampo
descriptionde nivel raíz que utiliza el operadorhasRoot
El returnScope establece el contexto para que los operadores pasen al campo de tipo funding_rounds embeddedDocuments, y el campo returnStoredSource se establece en true para devolver solo los campos storedSource. La query limita los 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 ])