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

Was this helpful?

  1. Capitulo 4
  2. Capitulo 4. Busquedas avanzadas

Shell

PreviousBusquedas en Rango de DoublesNextCapitulo 5. Búsqueda en Documentos Embebidos

Last updated 3 years ago

Was this helpful?

Se ha incluido el soporte para ejecutar instrucciones del shell de MongoDB directamente en Jmoordb.

Método

Descripción

List shell(String shell, Document... docSort)

shell: Es un String que representa instrucción MongoDB que se ejecuta en el shell. docSort es un documento que contiene la ordenación.

Por ejemplo: Ejecutamos una consulta mediante $elemMatch

referencia en MongoDB

en nuestro caso deseamos filtrar en una lista de documentos embebidos por dos o mas campos. Como recordara en una lista embebido en MongoDB (Array) , se aplica una condición Or, es decir busca en un documento dentro del array por un campo y si el otro valor del siguiente campo no esta en el mismo documento, continua buscando en otro documento por el segundo campo. De manera que para muchas condiciones and. no es factible utilizarlo , por esta razón podemos utilizar un $elemMatch para garantizar que se ejecuten las condiciones and en el mismo documento de una lista embebida.

La colección posee una lista embebida

documento de ejemplo

Si usamos Robo3T. ejecutamos la consulta

Aplicamos el filtro para encontrar el usuario que contenga denttro de la lista embebida profile docuemnto con la condicónl idapplicative = 3 idrole=12, iddepartament=3, active=false

   db.getCollection('user').find(
   { profile: { $elemMatch: {
                             idapplicative: { $eq: 3 },
                             idrole: { $eq:12 },
                             iddepartament:{$eq:3},
                             active:{$eq:false}
                                
                             } } }
    )

Contamos con las entidades

User.java

public class User {

    @Id
    private Integer iduser;
    private String username;
    private String password;
    private String name;
       @Email(message = "Email no es valido", regexp=".+@.+\\..+")
    private String email;
    private String cellphone;
    private String sex;
    private String photo;
    private String identificationcard;
    private String socialsecuritynumber;
    

    @Embedded
    private List<Profile> profile;

    private Boolean active;

Profile.java

public class Profile {

    @Id
    private Integer idprofile;
    private Integer idapplicative;
    private Integer idrole;
    private Integer iddepartament;

    private Boolean active;
    @Ignore
    Applicative applicative;
    @Ignore
    Role role;
    @Ignore
    Departament departament;
    ..
    }

Para reducir el ejemplo omitiremos las clases Applicative, Role y Departament.

Contamos con un repository


import com.avbravo.autentificacion.entity.User;
import com.avbravo.jmoordb.mongodb.repository.Repository;
import javax.ejb.Stateless;

/**
 *
 * @author avbravo
 */
@Stateless
public class UserRepository extends Repository<User> {

   
    public UserRepository(){
        super(User.class,"autentification","user");
    }
 

}

En el controller o clase que se desea utilizar

Desemos pasar el comando directamente como si lo hicieramos en el shell de mongodb

{ profile: { $elemMatch: { idapplicative: { $eq:3  },idrole: { $eq:12 }, iddepartament:{$eq:3},active:{$eq:true } } } }

Con lo que debemos convertirlo a un String y luego invocar el metodo shell() del repository


 @Inject
    UserRepository userRepository;
    
    
public List<User> queryElemMatch (@QueryParam("idapplicative") Integer idapplicative, @QueryParam("iddepartament") Integer iddepartament,
            @QueryParam("idrole") Integer idrole, @QueryParam("active") Boolean active) {
             List<User> userList = new ArrayList<>();
       if(idapplicative>0){
                shell+=operator+"idapplicative: { $eq:"+ idapplicative+"  }";
                operator=",";
                
            }
            if(iddepartament >0){
                shell+=operator+"iddepartament: { $eq:"+ iddepartament+"  }";
                operator=",";
            }
            if(idrole >0){
                shell+=operator+"idrole: { $eq:"+ idrole+"  }";
                operator=",";
            }
            shell+=operator+"active: { $eq:"+ active+"  }";
            
            shell +="} } }";
            
      userList = userRepository.shell(shell);                   

Esto nos devuelve la lista de usuario cuyos profiles cumplen con las condiciones.

https://docs.mongodb.com/manual/reference/operator/query/elemMatch/