# 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>
```
