jmoordb
  • Introduction
  • Overview
    • Copyleft
    • Prefacio
    • Creditos
    • Autor
    • Introduccion
  • Capitulo 1
    • Capítulo 1. Jmoordb
      • Base de Datos NoSQL
      • Esquema jmoordb
      • MongoDB
        • Instalar desde repositorio
        • Instalar MongoDB desde zip
        • Instalar Mongodb con Docker
        • Crear archivo mongodb.conf
        • Crear usuario de la base de datos
        • Conectarse a la base de datos con usuario y password
        • Optimizar MongoDB
        • Seguridad mongodb
      • OrientDB
      • Couchbase
      • Dependencias
      • MongoClientProvider
      • CouchbaseClientProvider
      • Bean Validation
      • Clases Internas
        • JmoordbNotifications.java
      • Interfaces
      • Configuracion del stack
      • Conexion a Base de datos
      • Conexión mediante Microservicios
  • Capitulo 2
    • Capítulo 2. Entidades y Repository
      • Entity
      • Anotaciones
      • Documento Embebido
      • Documento Embebido como Historial
      • Embebido con List de Referenciado
      • Documento Referenciado
      • Repository MongoDB
      • Repository Couchbase
      • Save
      • Update
      • Delete
      • Repository
  • Capitulo 3
    • Capítulo 3. Búsquedas
      • Búsquedas findById
      • findBySecondaryKey()
      • isFoundBySecondaryKey()
      • Busquedas find
      • Busquedas @Embedded
      • Busquedas @Referenced
      • Busquedas findAll
      • Búsquedas findBy
      • Busquedas findPagination
      • Busquedas findFirst
  • Capitulo Llaves primarias y secundarias
    • Capitulo Llaves primarias y secundarias
    • List<FieldBeans> fieldsOfBean()
    • Autoincrementable
  • Capitulo UserInfo
    • Capitulo UserInfo
  • Capitulo Profiles
    • Capitulo Profiles
  • Capitulo 4
    • Capitulo 4. Busquedas avanzadas
      • Buscar y actualizar automaticamente
      • Autoincrementable secundarios
      • Búsquedas Expresiones Regulares (Patrones Like)
      • Búsquedas por Texto findText
      • Busquedas con Helpers
      • Busquedas con Filter and Pagination
      • Full Text Search service
      • Busqueda entre enteros filterBetweenInteger
      • Busquedas en Rango de Doubles
      • Shell
  • Capitulo 5. Búsqueda en Documentos Embebidos
    • Capitulo 5. Búsqueda en Documentos Embebidos
      • Buscar elemento en un List<> Embebido/Referenciado
      • Filtros entre fechas en List<entity> embebidos
  • Capitulo 6. Busquedas en Fechas
    • Capitulo 6. Busquedas en Fechas
      • Busqueda entre Fechas filterBetweenDate()/filterBetweenDateWithoutHours()
      • betweendateWithFilter
      • Búsquedas por Día filterDayWithoutHour()
      • Disponible entre dos fechas en rangos de fechas inicial y final
      • Autocomplete disponibles en base a rango de dos fechas seleccionadas
      • Autocomplete en rangos de fechas excluyendo el mismo entity
      • Utilidades para Fechas
  • Capitulo 7 Aggregation
    • Capitulo 7 Aggregation
      • Introduccion Aggregation
      • Ejemplo $match
      • Ejemplo $group
      • Ejemplo $match, $group combinado
      • Ejemplo $lookup
      • Aggregation en ;MongoDB
  • Capitulo 8
    • Capitulo 8. Utilidades Bases datos
      • Restaurar base datos
      • internalQueryExecMaxBlockingSortBytes
      • Statistics
      • count
      • sizeOfPage
      • Indices
      • Crear Indice Primario
      • Lista de colecciones
      • Crear una coleccion
      • Eliminar una coleccion
      • Convertir Entity a documento
      • Eliminar base datos
      • Desconectar
      • Agregar campo a todos los documentos
      • ListOfPage
      • Importar un json a MongoDB
      • Migrar desde MySQL a MongoDB
      • updateOne
      • updateMany
      • Copiar base de datos
      • Migrar desde un archivo sql a mongodb
      • Cambiar el nombre de un campo
      • Exportar a csv
      • update field
      • Ver listado de colecciones
      • Eliminar un campo
      • Incrementar valor de campos
      • Tipos enteros
      • Agrupar y contar
      • iterate Cursor
      • Estadisticas
      • SQL vs MongoDB
      • not
      • Videos
      • Crear colleccion
      • Combinar bases de datos
      • sortConstructor
      • filterEQBuilder
      • documentToJson/jsonToDocument
      • Renombrar base de datos
      • Consultas $ne
      • Consulta entre Fechas
      • Consultas And
      • Consulta compleja
      • Contar registros complejos
      • Agregar un campo en una consulta compleja
      • Actualizacion compleja
      • Actualizar enteros mediante or
  • Capitulo 9 ACID Transactions Aun no implementado
    • Capitulo 9 ACID Transactions
      • ejemplos ACID
  • Capitulo 10. Bases datos sin esquema
    • Capitulo 10. Bases datos sin esquema
      • Insertar, Actualizar, Eliminar
  • Capítulo 11
    • Capitulo 11. Aplicación Java SE MongoDB
      • Base de datos
      • Proyecto Maven
      • Clase MongoClientProvider
      • Clase Entity
      • Clase Repository
      • Clase Controller
      • Clase Main
  • Capítulo 12
    • Capítulo 12 Java EE
      • Proyecto Maven Web
      • Dependencias web
      • Clase MongoClientProvider Web
      • Entity Web
      • Interfaces Web
      • Repository Web
      • Controller Web
      • Pagina Web
  • Capitulo 13. Couchbase
    • Capitulo 13 Couchbase
      • Base datos couchbase
      • Entity Couchbase
      • Dependencias Maven Couchbase
      • Couchabase Provider para el Ejemplo Couchbase
      • Repository Couchbase
      • Controller Couchbase
  • Capitulo 14 Auditoria
    • Capitulo 14 Auditoria
      • Introduccion
      • Implementación Repository de Auditoria
      • Historial de Acceso
      • Historial de Operaciones sobre documentos
      • Historial de Revisiones
    • SQL
  • Referencias
    • Referencias
      • Referencias importantes
Powered by GitBook
On this page
  • Búsquedas con Filters MongoDB
  • Filters con fecha
  • Filtrar llave primaria y la fecha de un dia sin tomar en cuanta las horas y minutos
  • Filtrar por año y mes
  • Filtros en un List<Entity> en posiciones diversas usando and y or
  • Filtros directos

Was this helpful?

  1. Capitulo 4
  2. Capitulo 4. Busquedas avanzadas

Busquedas con Filter and Pagination

PreviousBusquedas con HelpersNextFull Text Search service

Last updated 6 years ago

Was this helpful?

Búsquedas con Filters MongoDB

Proporciona una métodos para ejecutar operaciones con los operadores.

Se implementa en base a Filters utilizado en MongoDB

Sintaxis:

Método

Base de datos NoSQL

List < T > filters(Bson filter,Document... docSort)

MongoDB

List<T> filtersPagination(Bson filter, Integer pageNumber, Integer rowsForPage, Document... docSort)

Filtra con paginación

Nota:

La definición de los operados esta basado en la documentación de referencia de MongoDB.

Guía de referencias de Filters en MongoDB

Se pueden pasar directamente al método.

Filtros

Comparación

Predicado

Descripción

eq

igual

gt

mayor que

gte

mayor o igual

lt

menor

lte

menor o igual

ne

no es igual

in

busca algún valor

nin

ninguno de los valores de un arreglo

Lógicas

Operador

Descripción

and

y

or

o

not

no

nor

selecciona todos los documentos que no cumplen las condiciones

Arrays

Operador

Descripción

all

Busca arreglos que contienen los elementos específicos en la consulta.

elemMatch

Selecciona todos los documentos si un elemento del array coincide con todo lo especificado en $elemMatch

size

Selecciona todos los documentos si el campo del array es un tamaño especifico.

Elementos

Operador

Descripción

exists

Selecciona documentos que tienen el campo específico

type

Selecciona todos los documentos tiene el campo de ee tipo

Evaluación

Operador

Descripción

mod

Performs a modulo operation on the value of a field and selects documents with a specified result.

regex

Selects documents where values match a specified regular expression

text

Selects documemts matching a full-text search expression

where

Matches documents that satisfy a JavaScript expression.

Ejemplos Filtros

  • Filtrar por anio y mes

Bson filter = Filters.and(Filters.eq("anio", reservado.getAnio()), Filters.eq("mes", reservado.getMes()));
List< Reservado> list = reservadoRepository.filters(filter, new Document("idreservado", 1));
  • Busca el documento con Pais = Cuba sin ordenar

 Bson filter =Filters.eq("pais","cuba");
 List< Paises > list =paisesRepository.filters(filter);
  • Filtra todos los documentos con logo = "" y los ordena por país.

 Bson filter =Filters.eq("logo","");
 List< Paises > list =paisesRepository.filters(filter,new Document("pais",1));
  • AND Busca por la condicion logo = “” y poblacion =8579

 Bson filter =Filters.and(Filters.eq("logo",""), Filters.eq("poblacion",8579));
 List< Paises > list =paisesRepository.filters(filter,new Document("pais",1));
  • OR Busca documentos con Logo =”” o Población 8579

 Bson filter =Filters.or(Filters.eq("logo",""), Filters.eq("poblacion",8579));
 List< Paises > list =paisesRepository.filters(filter,new Document("pais",1));
  • Busca Población 8579 o Población 4567 o País = España o Siglas = cu

  Bson filter =Filters.and( 
    Filters.or(
    Filters.eq("Poblacion", 8579),
     Filters.eq("Poblacion",4567),
     Filters.or(
      Filters.eq("Pais", "España"),
       Filters.eq("Siglas", "cu")
     )//or
     ) //or
    );//and

 List< Paises > list =paisesRepository.filters(filter,new Document("pais",1));

Ejemplos de Arrays

Selecciona todos los documentos con un arreglo Provincias que contienen ambas palabras "Los Santos" y "Herrera":

 Bson filter = Filters.all("Provincias", Arrays.asList("Los Santos", "Herrera"));
 List< Paises > list =paisesFacade.filters(filter,new Document("pais",1));

Ejemplos Elements

Busca que exista el campo Población y que no tenga valores de 0 o 8579

 Bson filter = Filters.and(
    Filters.exists("poblacion"),
    Filters.nin("poblacion", 0,8579)
 );

 List < list > =paisesRepository.filters(filter);

Filters con fecha

Bson filter = Filters.and(Filters.gte("fechainicio", permiso.getFechainicio()), Filters.lte("fechafin", permiso.getFechafin()));
 list = permisoRepository.filters(filter, new Document("idpermiso", -1));

 // con paginacion
 permisoList = permisoRepository.filtersPagination(filter, page, rowPage, new Document("idpermiso", -1));

Filtrar llave primaria y la fecha de un dia sin tomar en cuanta las horas y minutos

Se usa con documentos donde el usuario al crearlos almacena fecha y hora.

Bson filter = Filters.and( 
                   Filters.eq("agente.idagente",agente.getIdagente())
                        ,  Filters.gte("fechainicio", permisoSearch.getFechainicio()),
                 Filters.lte("fechainicio", permisoSearch.getFechainicio()));

Filtrar por año y mes

  Bson filter = Filters.and(Filters.eq("anio", reservado.getAnio()), Filters.eq("mes", reservado.getMes()));
  List< Reservado> list = reservadoRepository.filters(filter, new Document("pais", 1));

Filtros en un List<Entity> en posiciones diversas usando and y or

A veces necesitamos hacer filtros complejos sobre un List<>

Tenemos las clases

public class Orden {
    @Id
    private Integer idorden;
    private Date fecha;
    private String tipoorden;
    private String subtipoorden;
    private String observacion;
    private Integer idemisor;
    private String tipoemisor;

    @Referenced(documment = "Almacen", repository = "com.avbravo.storeejb.repository.AlmacenRepository",
            field = "idalmacen", javatype = "Integer", lazy = false)
    private Almacen almacen;

    @Referenced(documment = "Usuario", repository = "com.avbravo.storeejb.repository.UsuarioRepository",
            field = "username", javatype = "String", lazy = false)
    private List<Usuario> usuario;
    private String activo;

    @Embedded
    private List<UserInfo> userInfo;
    }



    public class Usuario {

    @Id
    private String username;
    private String nombre;
    private String password;
    private String email;
    private String telefono;
    private Double porcentajecomision;
    private String activo;
    private String direccion;

   @Referenced(documment = "Almacen",
            repository = "com.avbravo.storeejb.repository.AlmacenRepository",
            field = "idalmacen", javatype = "Integer", lazy = false)
    private List<Almacen> almacen;


    @Referenced(documment = "Rol", repository = "com.avbravo.storeejb.repository.RolRepository",
            field = "idrol", javatype = "String", lazy = false)
    private List<Rol> rol;

    @Referenced(documment = "Empresa", repository = "com.avbravo.storeejb.repository.EmpresaRepository",
            field = "idempresa", javatype = "Integer", lazy = false)
    private Empresa empresa;

    @Embedded
    private List<UserInfo> userInfo;

    public Usuario() {
    }

    }

Si hacemos una consulta a la colección, List<Usuario>.

Deseamos filtrar en List<Usuario>, el encargado de tienda si observamos para algunas condiciones del subtipoorden, este estará en la posición 2 y para otras condiciones del subtipo de orden lo encontraremos en la posición 1.

Tendremos que crear un filtro complejo en el cual para obtener el usuario.#.username puede ser 1 o 2 dependiendo de las condiciones :;

posición

subtipoorden

2

tiendaabodega

2

bodegaatienda

2

bodegaainterno

2

internoabodega

1

tiendaainterno

1

iternoatienda

En este caso lo encontramos en la posición 1 al encargado de tienda ya que subtipoorden="tiendaainterno"

En el caso que el sutipoorden=""tiendaabodega" el encargado de tienda estara en la posiciòn 2:

Creamos los filtros para que busque en la posición 2 o 1 en base al valor de subtipoorden.,

   Bson filter_1 =Filters.and(Filters.eq("usuario.2.username",encargadotienda.getUsername()),
                                         Filters.or(Filters.eq("subtipoorden","tiendaabodega"),
                                                        Filters.eq("subtipoorden","bodegaatienda"),
                                                        Filters.eq("subtipoorden","bodegaainterno"),
                                                        Filters.eq("subtipoorden","internoabodega")));

   Bson filter_2 =Filters.and(Filters.eq("usuario.1.username",encargadotienda.getUsername()),
                                             Filters.or(Filters.eq("subtipoorden","tiendaainterno"),
                                                        Filters.eq("subtipoorden","iternoatienda")));


  Bson filter =Filters.or(filter_1, filter_2);

  ordenList = ordenRepository.filtersPagination(filter, page, rowPage, new Document("idorden", -1));

Filtros directos

ordenList = ordenRepository.filtersPagination(and(eq("activo",si),eq("anulado"no)), page, rowPage, new Document("idorden", -1));

Enlaces oficiales en MongoDB

http://mongodb.github.io/mongo-java-driver/3.0/builders/filters/
https://docs.mongodb.com/manual/reference/operator/query/text/