> For the complete documentation index, see [llms.txt](https://avbravo-2.gitbook.io/jmoordb/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://avbravo-2.gitbook.io/jmoordb/capitulo-3/introduccion/busquedas-embedded.md).

# Busquedas @Embedded

## Documentos Embebidos

El método T find() devolverá todas las clases definidas con los valores correspondientes.

De manera automática cargara en el Entity que esta embebido los datos del documento embebido en el correspondiente documento que esta almacenado en MongoDB.

Al realizar una consulta normal en un documento cargara todos los entitys dentro de el. (Pueden ser simples objetos utilizando la anotación @Embedded o listas de entitys).

**Importante:**

Para hacer búsquedas por documentos embebidos debemos indicar la opción de búsqueda con el con formato colección.atributo, como se muestra en el ejemplo 2.

**Continentes**

```
{ "_id" : ObjectId("587ee8fdb2a08a17e1782629"),

    "idcontinente" : "am",

    "continente" : "America",

    "planetas" : {

            "idplaneta" : "tr",

            "planeta" : "Tierra",

            "fecha" : ISODate("2017-01-18T04:03:08.872Z")

    }
}
```

### Ejemplo 1 Búsqueda por cualquier atributo del entity:

```
public class Continentes {

@Id

private String idcontinente;

private String continente;

@Embedded

private Planetas planetas;



@Override

public String toString() {

    return "Continentes{" + "idcontinente=" + idcontinente + ", continente=" + continente + ", planetas=" + planetas + '}';

}
```

### Controller

```
     Continentes continentes = new Continentes();
        Optional<Continentes> c = continentesFacade.find("idcontinente", "am");

        if(!c.isPresent()){
            System.out.println("No hay un continente con ese codigo");
        }else
        {
            continentes = c.get();
            System.out.println(""+continentes.toString());
            System.out.println("Planeta: " +continentes.getPlanetas().getPlaneta());
        }
```

**Salida:**

```
Continentes{idcontinente=am, continente=America, planetas=Planetas{idplaneta=tr, planeta=Tierra, fecha=Tue Jan 17 23:10:49 EST 2017}}

Planeta: Tierra
```

## Ejemplo 2 Buscar por un atributo del documento embebido

En este caso queremos buscar el documento que tiene asignado el planeta marte.

Debemos especificar el documento de busqueda: **new Document("planetas.idplaneta","marte")**

```
Documento:

{

"_id" : ObjectId("5884e4ffb2a08a10f017f673"),

"idcontinente" : "as",

"continente" : "Asia",

"planetas" : {

"idplaneta" : "marte",

"planeta" : "Marte",

"fecha" : ISODate("2017-01-21T21:21:42.044Z")
}

}
```

**Controller**

```
   Continentes continentes = new Continentes();
   Optional<Continentes> c = continentesRepository.find(new Document("planetas.idplaneta", "marte"));
   if (c.isPresent()) {
      System.out.println("no existe");
   } else {
      continentes =c.get();
      System.out.println("" + continentes.toString());
   }
```

**Salida:**

```
Continentes{idcontinente=as, continente=Asia, planetas=Planetas{idplaneta=marte, planeta=Marte, fecha=Sat Jan 21 16:21:42 EST 2017}
```

## Ejemplo 3: List @Embedded. Buscar en una lista de documentos embebidos

Deseamos buscar los documentos de continentes en el que este embebido el planeta marte en cualquiera de sus documentos embebidos.

```
db.continentes.find().pretty()                                                                                                    
{
    "_id" : ObjectId("5884f516b2a08a0ceb287e99"),
    "idcontinente" : "eu",
    "continente" : "Europa",
    "planetas" : [
            {
                    "idplaneta" : "marte",
                    "planeta" : "Marte",
                    "fecha" : ISODate("2017-01-21T21:21:42.044Z")
            },
            {
                    "idplaneta" : "tierra",
                    "planeta" : "Tierra",
                    "fecha" : ISODate("2017-01-21T21:21:42.044Z")
            }
    ]
 }
  {
    "_id" : ObjectId("5884f585b2a08a0da194491d"),
    "idcontinente" : "am",
    "continente" : "America",
    "planetas" : [
            {
                    "idplaneta" : "marte",
                    "planeta" : "Marte",
                    "fecha" : ISODate("2017-01-21T21:21:42.044Z")
            }
    ]
}
```

### Entity

```
@Getter @Setter public class Continentes {

@Id
private String idcontinente;
private String continente;
@Embedded
private List planetas;

@Override
public String toString() {
    return "Continentes{" + "idcontinente=" + idcontinente + ", continente=" + continente + ", planetas=" + planetas + '}';
}
}
```

### Controller

```
       Continentes continentes = new Continentes();
       Optional<Continentes> c = continentesRepository.find(new Document("planetas.idplaneta", "marte"));
       if (c.isPresent()) {
           System.out.println("no existe");
         } else {
          continentes =c.get();
          System.out.println("" + continentes.toString());
         }
```

**Salida:**

```
Mostraría los dos dos documentos America/Europa ya que tienen idplaneta = marte embebido.
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://avbravo-2.gitbook.io/jmoordb/capitulo-3/introduccion/busquedas-embedded.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
