# Capitulo 10. Bases datos sin esquema

## Capitulo 10.Bases datos sin esquema

Las bases de datos NoSQL, nos permiten almacenar información no estructurada

* Dentro del framework podemos realizar consultas sobre estas bases de datos y devolver un List\<JmoordbResult> que contiene un HashMap, sobre el que podemos recorrerlo para procesar los resultados
* Limitaciones los documentos embebidos son devueltos como un String con el siguiente formato Document{field1:value1, fieldn:valuen}}.
* Indicamos el nombre de la base de datos , esta limitado a una base de datos donde tengamos conexión.
* Pasamos el nombre de la colección.
* Podemos ordenar también el resultado
* Soporta Paginaciòn

| Métodos                                                                                                                                                            |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| public List\<JmoordbResult> **unknown(**&#x53;tring database,String collection, Document... doc)                                                                   |
| public List\<JmoordbResult>**unknownSort**(String database,String collection, Document doc,Document... docSort)                                                    |
| public List\<JmoordbResult> **unknown**(String database,String collectio&#x6E;**, Bson filter,**&#x44;ocument... docSort)                                          |
| public List\<JmoordbResult> **unknownPagination**(String database,String collection,Integer pageNumber, Integer rowsForPage, Document... doc)                      |
| public List\<JmoordbResult> **unknownPaginationSort**(String database,String collection,Integer pageNumber, Integer rowsForPage, Document doc,Document... docSort) |

. ![](https://1490144122-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lc1Wg6bBVlJX-GjApa1%2F-Lc1WhtDA-TTmZ6My9OJ%2F-Lc1Wvg0C8PL-HhW7Nla%2FDibujo%20sin%20t%C3%ADtulo%20\(1\).jpg?generation=1554820612082816\&alt=media)

**Ejemplo:**

Tenemos una colección llamada unknown con datos de diversos tipos.

| Documento |                                      |
| --------- | ------------------------------------ |
| 1         | cedula, nombre,edad                  |
| 2         | temperatura                          |
| 3         | id, padres(papa,mama)                |
| 4         | pais, provincia(los santos(distrito) |

```css
 db.unknown.find().pretty()                                                             
{                                                                                        
        "_id" : ObjectId("5c3f332ad4ea5a0c2d0d7cd9"),                                    
        "cedula" : "7-8-8",                                                              
        "nombre" : "Aristides",                                                          
        "edad" : 45                                                                      
}                                                                                        
{ "_id" : ObjectId("5c3f33edd4ea5a0c2d0d7cda"), "temperatura" : 45.3 }  

{                                                                                        
        "_id" : ObjectId("5c3f341ad4ea5a0c2d0d7cdb"),                                    
        "id" : "maria",                                                                  
        "padres" : {                                                                     
                "papa" : "Juan",                                                         
                "mama" : "Dianna"                                                        
        }                                                                                
}                                                                                        
{                                                                                        
        "_id" : ObjectId("5c3f35f1d4ea5a0c2d0d7cdc"),                                    
        "pais" : "Panama",                                                               
        "provincia" : {                                                                  
                "los santos" : {                                                         
                        "distrito" : "La villa"                                          
                }                                                                        
        }
}
```

* **Consultar todos los documentos**

```java
 List<JmoordbResult> list = articuloRepository.unknown("store","unknown");

            if (list == null || list.isEmpty()) {
                System.out.println("No hay data con esa condicion");
            } else {
                System.out.println("..................................................");
                list.stream().map((j) -> {
                    System.out.println("------------------------------------------");
                    return j;
                }).forEachOrdered((j) -> {
                      System.out.println(".....");
                    j.getField().forEach((k, v) -> System.out.println("  Key: " + k + ": Value: " + v));
                });
```

Salida

![](https://1490144122-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lc1Wg6bBVlJX-GjApa1%2F-Lc1WhtDA-TTmZ6My9OJ%2F-Lc1Wvg4MNK-E5w-orpI%2Fdocum.png?generation=1554820612007375\&alt=media)

#### **Nota:**&#x20;

* Recuerde que los embebidos se presentaran de la siguiente manera:

```java
 Key: _id: Value: 5c3f35f1d4ea5a0c2d0d7cdc
 Key: provincia: Value: Document{{los santos=Document{{distrito=La villa}}}}
 Key: pais: Value: Panama
```

* **Filtrar los documentos mediante un Document()**
* Devuelve los documentos que cumplan la condición de filtro.

```java
List<JmoordbResult> list = articuloRepository.unknown("store","unknown",new Document("cedula","7-8-8") );

            if (list == null || list.isEmpty()) {
                System.out.println("No hay data con esa condicion");
            } else {
                System.out.println("..................................................");
                list.stream().map((j) -> {
                    System.out.println("------------------------------------------");
                    return j;
                }).forEachOrdered((j) -> {
                    System.out.println(".....");
                    j.getField().forEach((k, v) -> System.out.println("  Key: " + k + ": Value: " + v));
                });


            }
```

Salida:

![](https://1490144122-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lc1Wg6bBVlJX-GjApa1%2F-Lc1WhtDA-TTmZ6My9OJ%2F-Lc1Wvg6-hX0Ta29uDwT%2Fje1.png?generation=1554820612059429\&alt=media)

## Usando Paginacion

* Mostrar dos primeros registros por pagina
* Se pueden hace filtros y ordenación

```java
 List<JmoordbResult> list = articuloRepository.unknownPagination("store","unknown",1,2);

            if (list == null || list.isEmpty()) {
                System.out.println("No hay data con esa condicion");
            } else {
                System.out.println("..................................................");
                list.stream().map((j) -> {
                    System.out.println("------------------------------------------");
                    return j;
                }).forEachOrdered((j) -> {
                    System.out.println(".....");
                    j.getField().forEach((k, v) -> System.out.println("  Key: " + k + ": Value: " + v));
                });


            }
```

## Usando Filtro (Bson)

* Filtrar id= maria
* Usamos los Builder directamente

```java
List<JmoordbResult> list = articuloRepository.unknown("store","unknown",eq("id","maria") );

            if (list == null || list.isEmpty()) {
                System.out.println("No hay data con esa condicion");
            } else {
                System.out.println("..................................................");
                list.stream().map((j) -> {
                    System.out.println("------------------------------------------");
                    return j;
                }).forEachOrdered((j) -> {
                    System.out.println(".....");
                    j.getField().forEach((k, v) -> System.out.println("  Key: " + k + ": Value: " + v));
                });


            }
```

Salida:

![](https://1490144122-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lc1Wg6bBVlJX-GjApa1%2F-Lc1WhtDA-TTmZ6My9OJ%2F-Lc1Wvg8dIket-Ds6saJ%2Fmaria.png?generation=1554820621587743\&alt=media)
