# Búsquedas findBy

## Búsquedas findBy()

Proporciona métodos para realizar consultas y devolver una lista de entitys.

#### Métodos

| Método                                                                 | Base datos soportada              |
| ---------------------------------------------------------------------- | --------------------------------- |
| public List < T > findBy(Document doc, Document... docSort)            | MongoDB                           |
| public List< T > findBy(String key, Object value, Document... docSort) | MongoDB                           |
| public List< T> findBy(String statement)                               | Couchbase                         |
| public List< T> findBy(N1qlQuery query)                                | Couchbase                         |
| public List\<T> findBy(String sql)                                     | MongoDB soporta sql               |
| public List\<T> findBy(**Bson builder**, Document... docSort)          | MongoDB, soporta  objetos Builder |

&#x20;**Document doc:** representa al Documento a buscar.

&#x20;**docSort:** opcional Documento a ordenar.

**String key:** es el nombre del atributo a buscar

&#x20;**String value:** es el valor del atributo a buscar Retorna un List < T > de todos los documentos que coincidan con el criterio.

**String statement**: Es una sentencia N1QL, similar a SQL.

**N1qlQuery query:** Es el lenguaje N1QL desarrollado por Couchbase

### Ejemplos MongoDB

**Busca los documentos que coincidan con siglas = cu sin ordenar**

```
 List < Paises >  list =paisesRepository.findBy(new Document("idpais", "cu") );
```

**Busca los documentos que coincidan con Siglas = cu ordenado por Pais**

```
 List< Paises > list =paisesRepository.findBy(new Document("idpais", "cu") , new Document(“pais”,1));
```

**Busca en el documento embebido sin ordenar**

```
 List< Paises > list =paisesRepository.findBy(new Document("continentes.idcontinente", "5") );
```

**Busca en el documento embebido ordenado por Pais**

```
 List< Paises > list =paisesFacade.findBy(new Document("continentes.idcontinente", "5") , new Document(“pais”, 1));
```

**Busca en el documento los que la población sea mayor de 500 sin ordenar**

```
List< Paises > list =paisesRepository.findBy(new Document(“poblacion”, new Document("$gt", 500) );
```

**Busca en el documento los que la población sea mayor de 500 ordenado por Pais**

```
List< Paises > list =paisesRepository.findBy(new Document(“poblacion”, new Document("$gt", 500) ,new Document("pais",1));
```

**Busca en el documento los que la población sea menor de 200**

```
List < Paises > list =paisesRepository.findBy(new Document(“poblacion”, new Document("$lt", 200) );
```

**Busca en el documento los que la población sea igual a 800**

```
List< Paises > list =paisesReository.findBy(new Document("poblacion", new Document("$eq", 800) );
```

**Buscar embebidos**

Se especifica coleccion.atributo

List< Paises > list =paisesReository.findBy(new Document("continentes.continente", "Tierra"));

**Buscar referenciados**

```
List< Paises > list =paisesReository.findBy(new Document("idcontinente","am");
```

### Builder

Pasamos el Builder como parámetro en este caso (activo="si" y marca.idmarca=9)

```java
List<Articulo> list = articuloRepository.findBy(and(eq("activo","si"),eq("marca.idmarca",9)));
if (list == null || list.isEmpty()) {
      System.out.println("->no hay articulos con esa condicion");
  } else {
     System.out.println("-> cantidad de articulos " + list.size());
}
```

## Soporte SQL

```
String sql = "select * from pais where idcontinente='am'";
List< Paises > list =paisesReository.findBy(sql,"am");
```

### Ejemplos Couchbase

**Busca el planeta cuyo nombre sea marte.**

```
    List<Planetas> list=  planetasFacade.findAll("select  * from default where planeta='Marte'");
    list.forEach((p) -> {
        System.out.println(p.toString());
    });
```

**Buscar mediante N1QL**

```
 N1qlQuery query = N1qlQuery
                .simple(select("*")
                .from("default")
                .limit(10));

        PlanetasFacade planetasFacade = new PlanetasFacade();
        List<Planetas> list = planetasFacade.findBy(query);
        list.forEach((p) -> {
            System.out.println(p.toString());
        });
```

**Buscar por atributos combinados**

* Mezclamos parámetros

new Document("idpermiso", permiso.getIdpermiso()).append("agente.idagente",agente.getIdagente())

```java
  public String searchById() {
        try {
            writable = true;


            List<Permiso> list = permisoRepository.findBy(new Document("idpermiso", permiso.getIdpermiso()).append("agente.idagente",agente.getIdagente()), new Document("idpermiso", -1));

            if (!list.isEmpty()) {
                writable = false;
                permisoList.removeAll(permisoList);
                permisoList = list;
                permisoFiltered = permisoList;
                permisoDataModel = new PermisoDataModel(permisoList);

            } else {
                permisoList.removeAll(permisoList);
                permisoFiltered = permisoList;
                permisoDataModel = new PermisoDataModel(permisoList);

                JsfUtil.warningMessage(rf.getAppMessage("warning.noexiste"));
                return "";
            }

        } catch (Exception e) {
            JsfUtil.errorMessage("searchById()" + e.getLocalizedMessage());
        }
        return "";
    }// </editor-fold>
```


---

# Agent Instructions: 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:

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

The question should be specific, self-contained, and written in natural language.
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.
