JavaScript - Node + Mysql + Autoincrement

 
Vista:

Node + Mysql + Autoincrement

Publicado por Javier (1 intervención) el 13/01/2019 18:52:06
Buenos días!
Soy muy nuevo en el mundo de javascript y me senté a leer un poquito de node y mysql 8 (trabajando como document store) para crear un mini bot para un servidor de Discord (utilizando Discordjs).

Soy consciente de las ventajas y desventajas de realizar campos auto-incrementales en bases de datos NOSQL y también tengo en cuenta que la base de datos genera automáticamente un valor en el campo ._id que puede utilizarse para realizar búsquedas y orden de inserción y un largo etc.
De cualquier manera estoy dispuesto a realizar una colección que tenga documentos con un campo auto-incremental. El problema es que no puedo lograrlo (xD!)

Hay muchos tutoriales y foros donde utilizan una función donde almacenan el número con la secuencia actual de los registros, algo como:

1
2
3
4
5
6
7
8
9
10
function getNextSequenceValue(sequenceName){
 
   var sequenceDocument = db.counters.findAndModify({
      query:{_id: sequenceName },
      update: {$inc:{sequence_value:1}},
      new:true
   });
 
   return sequenceDocument.sequence_value;
}

Pero no he podido adaptar ese código a Mysql (la función de arriba funciona en MongoDB).
El operador $inc no funciona de la misma manera en mysql o al menos no encontré ningún lugar donde poder leer al respecto.

Traté de realizar dos funciones, una que busque el valor actual en la colección de secuencias y otra función que modifique ese valor (agregandole + 1), que sería básicamente lo que hace el operador $inc, pero la asincronía me está jugando una mala pasada.

Explico un poco, por que sé que voy a tener más de un error en algún lado y posiblemente toda mi lógica esté funcionando mal.. pero aquí va lo que hice:

- Tengo una colección llamada "Secuencias" donde guardo la secuencia actual y una colección llamada "Collection" que quiero que tenga el id auto incremental.
- "Session" es una constante que contiene la conexión a mysql activa.
- Dentro de una función async, a la hora de guardar los datos ejecuto algo como:

1
2
3
4
5
6
obtenerActual(Session, (actual) =>{
  modificarActual(actual.secuencia + 1, Session, (result) =>{
     Session.getSchema('Schema').getCollection('Collection').add({id: result.secuencia, dato: loquesea}).execute()
     console.log(actual, result);
  })
})

El problema es que al ejecutar el codigo, "actual" es undefined.. por lo que no puedo leer su campo secuencia.
Supongo que esto se da por la asincronía y no logro encontrar como solucionarlo

1
2
3
4
5
6
7
8
9
10
11
12
obtenerActual(Session, callback) {
  callback(
    session.getSchema('Schema').getCollection('Secuencias').find("id = 'Sid'").sort(["secuencia
    desc"]).limit(1).execute()
  )
}
 
modificarActual(actual, Session, callback) {
  callback(
    session.getSchema('Schema').getCollection('Secuencias').modify("id = 'Sid'", actual).execute()
  )
}


Como dije antes, acabo de sentarme a leer sobre TODAS las tecnologías que estoy utilizando (incluyendo Discordjs).. así que tengo muy claro que errores debo tener.
Todas las críticas y posibles soluciones son más que bienvenidas.
Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder