Skip to main content

Autoincrementable en MongoDB con findOneAndUpdate() JGMongo

Existen muchas maneras de administrar campos autoincrementables, en esta ocasión mostrare la implementación que use en JGMongo https://github.com/avbravo/jgmongo/ utilizando en metodo findOneAndUpdate().

Implementaremos el método de la clase AbstractFacade

 public T findOneAndUpdate(String key, String value,String field,Integer... incremento) 

Key : es el campo a buscar
value: el valor de ese campo
field: es el campo numérico a implementar
incremento: Opcional si no se pasa ningún valor incrementa en uno el campo
Problema 1:

Existe una colección de documentos donde se maneja un campo entero que funcionara como autoincrementable:  
Agenda{"Id":1,"evento":"A"},{"Id":2,"evento":"B"},{"Id":3,"evento":"C"}
  • Si se elimina el evento 3, 

Agenda{"Id":1,"evento":"A"},{"Id":2,"evento":"B"}
  • Cuando se desee insertar un documento  con el {"evento":"D"}, se pueden producir algunas situaciones

1. Utilizar la función count() para conocer la cantidad de documentos que tiene la colección, este devolverá 2 y al sumarle 1 tendrá el valor de 3, que ya fue usado para el {"evento":"C"}. 
Al insertarlo quedaría de la siguiente manera:
Agenda{"Id":1,"evento":"A"},{"Id":2,"evento":"B"},{"Id":3,"evento":"D"}

2. Si buscamos el ultimo documento de la colección {"Id":2,"evento":"B"} , el valor del id es 2 al sumarle 1 quedara en 3, por lo tanto al insertar el evento {"evento":"D"} a la colección este tendria el valor de 3 para el id y este ya fue usado en el {"evento" :"C"}.
Al insertarlo quedaría de la siguiente manera:
Agenda{"Id":1,"evento":"A"},{"Id":2,"evento":"B"},{"Id":3,"evento":"D"}


Utilizando findOneAndUpdate()

1- Crear una colección para que lleve el contador de los documentos y sus id que se usan en otras colecciones. Autoincrementable{"Documento":"Agenda","Valor":1}
De esta manera en la colección Agenda utilizara el valor que devuelva el campo valor de la colección Autoincrementable.
El metodo findOneAndUpdate() busca el documento que cumpla la condición y realiza el incremento automático y devuelve el documento actualizado.
  • findOneAndUpdate("Documento", "Agenda", "Valor"); // incrementa en 1 el campo Valor
  • findOneAndUpdate("Documento", "Agenda", "Valor",8); // incrementa en 8 el campo Valor, le podemos indicar el valor que deseamos de incremento

Al insertarlo quedaría de la siguiente manera:
Incrementa el campo valor y devuelve el documento actualizado
 Autoincrementable{"Documento":"Agenda","Valor":4}
y este se asigna al id de la colección Agenda
Agenda{"Id":1,"evento":"A"},{"Id":2,"evento":"B"},{"Id":4,"evento":"D"}

Código en Java
 Autoincrementable autoincrementable = new Autoincrementable();
      autoincrementable=autoincrementableFacade.findOneAndUpdate("Documento", "Agenda", "Valor");
                agenda.setIdagenda(autoincrementable.getValor());
                




Comments

Popular posts from this blog

JUnit con DataClassG

JUnit con DataClassG 0. ESQUEMA Services: Por cada beans crearemos una clase Services que se encargará de interactuar con el controller para realizar las operaciones de la base de datos. Se crearan los métodos insert, update,delete y los demas metodos para realizar las diversas operaciones. Test: Se crearán las clases para test de las clases Services. Form: Los formularios para la interactuar con el usuario. ProvinciasServices.java colocamos los métodos, insert, update,delete public class ProvinciasServices {    ProvinciasController provinciasController = new ProvinciasController();    public ProvinciasServices() {    }    public Boolean insert (Provincias provincias){        try{            if(provinciasController.insert(provincias)){              return tru...

Primefaces v13

 La versión nueva de primefaces v13.0 elimina el componente <p:repeat>  Consulte los cambios en  https://github.com/primefaces/primefaces/releases/tag/13.0.0 por lo tanto si necesita una solución similar considere utilizar  <p:carousel>  o  <ui:repeat> En la versión 13 genera una excepción