Filtros entre fechas en List<entity> embebidos

Las bases de datos NoSQL, tales como MongoDB nos permiten gran flexibilidad comparados con bases de datos relacionales.

Por ejemplo en una base de datos de facturación de un sistema relacional, tendríamos una tabla de facturas y otra de Pagare, con cientos de registros asociados.

Mediante SQL podemos hacer consultas, en el ejemplo, buscamos en la tabla de pagare todas aquellas facturas con un estatus especifico y con la condición que estos pagares estén entre una fecha de inicio y de fin y que tengan el estatus de cancelado="no".

Usamos un select o un join, en el cual iteramos la consulta sobre dos tablas para obtener los resultados.

Se puede usar para el cierre mensual.

Ahora lo vemos desde una perspectiva NoQSL, en el cual podemos almacenar dentro de la colección Factura una lista embebida de Pagare. De manera que al consultar en la colección Factura, automáticamente tendremos acceso a los pagares que se almacenan en la misma colección.

Esquema del Json de Factura

Clase Factura:

Contiene una Lista embebida de Pagare.

@Embedded
    List<Pagare> pagare;
 Integer anio = 2019;
 Integer mes = 4;
 Date firstDate = DateUtil.primerDiaDelMesEnFecha(anio, mes);
 Date lastDate = DateUtil.getDateLastOfMonth(anio, mes);

 Bson filterfactura = Filters.and(Filters.eq("almacen.idalmacen", 6), 
                     Filters.or(Filters.eq("estatusfactura.idestatusfactura", 1), 
                     Filters.eq("estatusfactura.idestatusfactura", 2),
                     Filters.eq("estatusfactura.idestatusfactura", 6),
                     Filters.eq("estatusfactura.idestatusfactura", 7)));


  Bson filterpagare = functionFilter(0, firstDate,lastDate);
  for (int i = 1; i < 13; i++) {
        Bson f = functionFilter(i, firstDate,lastDate);
        filterpagare = Filters.or(filterpagare, f);
  }

Generar el filtro

Bson filter = Filters.and(filterfactura, filterpagare);

  List<Factura> listFactura = facturaRepository.filters(filter, new Document("idfactura", 1));

Creamos la función para hacer el filtro por cada elemento

  Bson filterpagare = functionFilter(0, firstDate,lastDate);
            for (int i = 1; i < 13; i++) {
                Bson f = functionFilter(i, firstDate,lastDate);
                filterpagare = Filters.or(filterpagare, f);
            }

Last updated