Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

embeddedDocument Operador

embeddedDocument

El operador embeddedDocument es similar al operador $elemMatch. Restringe que varios predicados de query se cumplan a partir de un Ășnico elemento de un arreglo de documentos incrustados. embeddedDocument solo se puede usar para query sobre campos del tipo embeddedDocuments.

embeddedDocument tiene la siguiente sintaxis:

{
"embeddedDocument": {
"path": "<path-to-field>",
"operator": { <operator-specification> },
"score": { <score-options> }
}
}

embeddedDocument utiliza las siguientes opciones para construir una query:

Campo
Tipo
DescripciĂłn
Necesidad

operator

Objeto

Operador que se utilizarĂĄ para consultar cada documento en el arreglo de documentos que se especifique en el path. El operador moreLikeThis no estĂĄ soportado.

Requerido

path

string

Campo indexado de tipo embeddedDocuments para bĂșsqueda. El campo especificado debe ser el campo padre de todos los operadores y campos especificados usando la opciĂłn operator.

Requerido

score

Objeto

PuntuaciĂłn que asignar a los resultados de bĂșsqueda coincidentes. Puede utilizar la embedded opciĂłn de puntuaciĂłn para configurar las opciones de puntuaciĂłn. Para aprender mĂĄs, consulta Comportamiento de puntuaciĂłn.

Opcional

No puedes usar resaltar en consultas dentro del operador embeddedDocument.

Nota

MongoDB Search deja de replicar cambios para Ă­ndices mayores a 2,100,000,000 objetos de Ă­ndice por particiĂłn, en un set de rĂ©plicas o en una sola particiĂłn, donde cada documento principal incrustado indexado cuenta como un Ășnico objeto. Si se supera este lĂ­mite, pueden generarse resultados de query obsoletos.

Usar el tipo de campo embeddedDocuments puede hacer que la indexaciĂłn de objetos supere este lĂ­mite de tamaño de Ă­ndice, porque cada documento incrustado indexado se cuenta como un solo objeto. Si se crea un Ă­ndice de MongoDB Search que tiene o tendrĂĄ pronto mĂĄs de 2.1 mil millones de objetos de Ă­ndice, se debe usar la opciĂłn de Ă­ndice numPartitions para particionar el Ă­ndice (compatible solo con implementaciones de nodos de Search) o crear una particiĂłn del clĂșster.

Cuando usted consulta documentos incrustados en arreglos utilizando el operador embeddedDocument, MongoDB Search evalĂșa y califica las condiciones de query del operador en diferentes etapas de la ejecuciĂłn de la query. MongoDB Search:

  1. EvalĂșa cada documento incrustado en el arreglo de forma independiente.

  2. Combina las puntuaciones de los resultados coincidentes segĂșn lo configurado utilizando la opciĂłn embedded, o puntĂșa sumando las puntuaciones de los resultados coincidentes si no se especifica una opciĂłn de puntuaciĂłn de embedded.

  3. Une los resultados coincidentes con el documento principal si se especifican otros predicados de query a través del compuesto.

De forma predeterminada, el operador embeddedDocument utiliza la estrategia de agregaciĂłn predeterminada, sum, para combinar puntuaciones de coincidencias de documentos incrustados. La opciĂłn embeddedDocument operador score le permite anular lo por defecto y configurar la puntuaciĂłn de los resultados coincidentes mediante la opciĂłn embedded.

Para ordenar los documentos parent por un campo de documento incrustado, debes realizar lo siguiente:

  • Indexa los padres del campo de documento incrustado como el tipo documento.

  • Indexa el campo secundario con valores de string dentro del documento incrustado como el tipo de token. Para los campos secundarios con valores numĂ©ricos y de fecha, habilita la asignaciĂłn dinĂĄmica para indexar esos campos automĂĄticamente.

MongoDB Search ordena solo en documentos principales. No ordena los campos hijo dentro de un arreglo de documentos. Para un ejemplo, consulte Ejemplo de clasificaciĂłn.

Para crear una faceta solo en los documentos secundarios de un arreglo embeddedDocuments que coincidan con su query, agregue un bloque embeddedDocument coincidente a la definiciĂłn de la faceta, ademĂĄs de usar embeddedDocument en el operator de la query. Si omite el bloque embeddedDocument en la definiciĂłn de la faceta, MongoDB Search aplica faceta a todos los documentos secundarios del arreglo, no solo a los que coinciden con su query. Para obtener mĂĄs informaciĂłn, consulte Faceta en la bĂșsqueda de elementos secundarios coincidentes de un arreglo de documentos incrustados.

Puedes resaltar en campos si los campos estĂĄn indexados bajo un campo principal de tipo documento para predicados de query especificados dentro del operador embeddedDocument. Para ver un ejemplo, consulte el tutorial.

Para aprender sobre las limitaciones del operador embeddedDocument, consulta embeddedDocument Limitaciones del operador.

Los siguientes ejemplos utilizan la colecciĂłn sample_supplies.sales del conjunto de datos de muestra.

Estas consultas de ejemplo utilizan la siguiente definiciĂłn de Ă­ndice en la colecciĂłn:

{
"mappings": {
"dynamic": true,
"fields": {
"items": [
{
"dynamic": true,
"type": "embeddedDocuments"
},
{
"dynamic": true,
"fields": {
"tags": {
"type": "token"
}
},
"type": "document"
}
],
"purchaseMethod": {
"type": "token"
}
}
}
}

La siguiente query busca elementos en la colecciĂłn etiqueta school con preferencia por los elementos llamados backpack. MongoDB Search puntĂșa los resultados en orden descendente segĂșn la puntuaciĂłn promedio (media aritmĂ©tica) de todos los documentos incrustados coincidentes. La query incluye una fase $limit para limitar la salida a 5 documentos y una fase $project para:

  • Excluye todos los campos excepto los campos items.name y items.tags

  • Añade un campo llamado score

1db.sales.aggregate({
2 "$search": {
3 "embeddedDocument": {
4 "path": "items",
5 "operator": {
6 "compound": {
7 "must": [{
8 "text": {
9 "path": "items.tags",
10 "query": "school"
11 }
12 }],
13 "should": [{
14 "text": {
15 "path": "items.name",
16 "query": "backpack"
17 }
18 }]
19 }
20 },
21 "score": {
22 "embedded": {
23 "aggregate": "mean"
24 }
25 }
26 }
27 }
28},
29{
30 $limit: 5
31},
32{
33 $project: {
34 "_id": 0,
35 "items.name": 1,
36 "items.tags": 1,
37 "score": { $meta: "searchScore" }
38 }
39})

La siguiente query busca elementos etiquetados con school dando preferencia a los elementos llamados backpack. Solicita informaciĂłn de facetas en el campo purchaseMethod.

1db.sales.aggregate({
2 "$searchMeta": {
3 "facet": {
4 "operator": {
5 "embeddedDocument": {
6 "path": "items",
7 "operator": {
8 "compound": {
9 "must": [
10 {
11 "text": {
12 "path": "items.tags",
13 "query": "school"
14 }
15 }
16 ],
17 "should": [
18 {
19 "text": {
20 "path": "items.name",
21 "query": "backpack"
22 }
23 }
24 ]
25 }
26 }
27 }
28 },
29 "facets": {
30 "purchaseMethodFacet": {
31 "type": "string",
32 "path": "purchaseMethod"
33 }
34 }
35 }
36 }
37})

La siguiente query busca elementos con el nombre laptop y ordena los resultados por el campo items.tags. La query incluye una fase $limit para limitar la salida a 5 documentos y una fase $project para:

  • Excluir todos los campos salvo items.name y items.tags

  • Añade un campo llamado score

1db.sales.aggregate({
2 "$search": {
3 "embeddedDocument": {
4 "path": "items",
5 "operator": {
6 "text": {
7 "path": "items.name",
8 "query": "laptop"
9 }
10 }
11 },
12 "sort": {
13 "items.tags": 1
14 }
15 }
16},
17{
18 "$limit": 5
19},
20{
21 "$project": {
22 "_id": 0,
23 "items.name": 1,
24 "items.tags": 1,
25 "score": { "$meta": "searchScore" }
26 }
27})

La siguiente query devuelve solo los documentos anidados que coinciden con la query. La query utiliza clĂĄusulas de operador compuesto de MongoDB Search en la etapa $search para encontrar documentos coincidentes y luego los operadores de agregaciĂłn en la etapa $project para devolver solo los documentos incrustados coincidentes. En concreto, la query especifica las siguientes etapas del pipeline:

Especifica los siguientes criterios en la clĂĄusula must del operador compuesto:

  • Verificar si el campo items.price existe en la colecciĂłn.

  • Busca los Ă­tems etiquetados como school en el campo items.tags.

  • Coincide solo si el valor es superior a 2 para el campo items.quantity.

Limita la salida a 5 documentos.

Realiza las siguientes acciones:

  • Excluya el campo _id e incluya solo los campos items y storeLocation.

  • Utilice $filter para devolver solo los elementos del arreglo de entrada items que coincidan con la condiciĂłn especificada mediante el operador $and. El operador and utiliza los siguientes operadores:

    • $ifNull para determinar si items.price contiene valores nulos y sustituir los valores nulos, si estĂĄn presentes, por la expresiĂłn de sustituciĂłn false.

    • $gt verificar si la cantidad es mayor a 2.

    • $in para comprobar si office existe en el arreglo tags.

1db.sales.aggregate(
2 {
3 "$search": {
4 "embeddedDocument": {
5 "path": "items",
6 "operator": {
7 "compound": {
8 "must": [
9 {
10 "range": {
11 "path": "items.quantity",
12 "gt": 2
13 }
14 },
15 {
16 "exists": {
17 "path": "items.price"
18 }
19 },
20 {
21 "text": {
22 "path": "items.tags",
23 "query": "school"
24 }
25 }
26 ]
27 }
28 }
29 }
30 }
31 },
32 {
33 "$limit": 2
34 },
35 {
36 "$project": {
37 "_id": 0,
38 "storeLocation": 1,
39 "items": {
40 "$filter": {
41 "input": "$items",
42 "cond": {
43 "$and": [
44 {
45 "$ifNull": [
46 "$$this.price", "false"
47 ]
48 },
49 {
50 "$gt": [
51 "$$this.quantity", 2
52 ]
53 },
54 {
55 "$in": [
56 "office", "$$this.tags"
57 ]
58 }
59 ]
60 }
61 }
62 }
63 }
64 }
65)

Para obtener mĂĄs informaciĂłn, consulta CĂłmo ejecutar queries de bĂșsqueda de MongoDB en campos de documentos incrustados.