Buscar y actualizar automaticamente
Muchas veces necesitamos incrementar el valor de un campo y retornarlo, por ejemplo para atributos autoincrementable.
Por ejemplo en bases de datos NoSQL como MongoDB no existe el concepto de autoincrementable.
Métodos:
Métodos | Bases de datos NoSQL |
public T findOneAndUpdate(String key, String value,String field,Integer... incremento) | MongoDB |
public T findOneAndUpdate(Document doc, String field, Integer... incremento) | MongoDB |
public T findOneAndUpdate(Document doc, Document inc, Integer... incremento) | MongoDB |
Parámetros
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
Nota: A partir de la versión 0.2.9 se definió esta clase dentro de JMoordb, no es necesario declarar el entity
Definir el entity: Autoincrementable
Ejemplo 1:
Nota:
Recuerde que no es necesario crear la clase Autoincrementable, este pertenece al framework.
Crear el Repository.
Autoincrementable como campo llave
Contamos con una colección para almacenar facturas, y el atributo idfactura debe incrementarse automáticamente.
Crear una colección para que lleve el contador de los documentos y sus id que se usan en otras colecciones.
Controller
Debemos inicializar el documento Autoincrementable, donde le indicamos el nombre del documento y el contador iniciar para llevar el control. Todos los documentos que se desee controlar su autoincrementable deben ser almacenados aquí. En el ejemplo lo inicializamos en 0.
Si consultamos el documento
Guardar una factura
Si consultamos la colección autoincrementable, podemos comprobar que se consulto el documento facturas y automáticamente se incremento en uno el valor del contador.
Si consultamos la colección facturas
Ejemplo 2:
Autoincremantable en un atributo que no es llave primaria.
En el método save() , verificamos si no se ha creado un registro autoincrementable y lo creamos.
Análisis de autoincrementables
Ejemplo del porque se implementa findOneAndUpdate()
Existe una colección de documentos donde se maneja un campo entero que funcionara como autoincrementable:
Agenda{"Id":1,"evento":"A"},
Si se elimina el evento 3,
Agenda{"Id":1,"evento":"A"},
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
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 tendría 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"},
De esta manera en la colección Agenda utilizara el valor que devuelva el campo valor de la colección
Autoincrementable.
El método findOneAndUpdate() busca el documento que cumpla la condición y realiza el incremento automático y devuelve el documento actualizado.
// incrementa en 1 el campo Valor
findOneAndUpdate("documento", "agenda", "valor");
// incrementa en 8 el campo Valor, le podemos indicar el valor que deseamos de incremento
findOneAndUpdate("documento", "agenda", "valor",8);
Al insertarlo quedaría de la siguiente manera:
Incrementa el campo valor y devuelve el documento actualizadoAutoincrementable{"documento":"agenda","valor":4}
y este se asigna al id de la colección Agenda Agenda
Código en Java:
Last updated