Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

194
Views
¿Secuela cómo devolver el resultado como una matriz 2D en lugar de una matriz de objetos?

Estoy usando el método Sequelize query() de la siguiente manera:

 const sequelize = new Sequelize(...); ... // IMPORTANT: No changed allowed on this query const queryFromUser = "SELECT table1.colname, table2.colname FROM table1 JOIN table2 ON/*...*/"; const result = await sequelize.query(queryFromUser);

Debido a que estoy seleccionando dos columnas con nombres idénticos ( colname ), en el resultado obtengo algo como:

[{ "colname": "val1" }, { "colname": "val2" }...] , y esta matriz contiene valores solo de la columna table2.colname , ya que está sobrescribiendo los valores de table1.colname .

Sé que hay una opción para usar alias en la consulta SQL con AS , pero no tengo control sobre esta consulta.

Creo que resolvería el problema si hubiera una forma de devolver el resultado como una matriz 2D, en lugar de la matriz de objetos. ¿Hay alguna forma de configurar la consulta Sequelize de esa manera?

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Me temo que esto no será posible sin cambios en la biblioteca que se conecten directamente a la base de datos y analicen su respuesta.

La razón es:

  • la base de datos devuelve AMBOS valores
  • luego, en javascript, hay una asignación de valores de filas recibidos a objetos

Este mapeo se vería así

 // RETURNED VALUE FROM DB: row1 -> fieldName:value&fieldName:value2 // and then javascript code for parsing values from database would look similar to that: const row = {}; row.fieldName = value; row.fieldName = value2; return row;

Como puede ver, a menos que cambie el mecanismo interno en las bibliotecas, es imposible cambiar este comportamiento (objeto javascript).

A MENOS QUE esté usando mysql... Si está usando mysql, puede usar este https://github.com/mysqljs/mysql#joins-with-overlapping-column-names pero hay un problema... Sequelize no lo es admite esta opción, y debido a eso, se vería obligado a mantener el uso de ambas bibliotecas en una (y ambas conectadas)

Detrás de esta línea, hay una respuesta más antigua (antes de que se agregara "ningún cambio en la consulta")

Debido a que usa la consulta SQL directa (no compilada por secuencia, sino escrita a mano), necesita alias de las columnas correctamente.

Entonces, como viste, el nombre de la colname se sobrescribiría con el otro.

 SELECT table1.colname, table2.colname FROM table1 JOIN table2 ON/*...*/

Pero si usas un alias, entonces esa colisión no ocurrirá.

 SELECT table1.colname as colName1, table2.colname as colName2 FROM table1 JOIN table2 ON/*...*/

y terminará con filas como: {colName1: ..., colName2: ...}

Si usa la creación de secuencias en el generador de consultas con modelos, la secuencia crearía un alias de todo y luego devolvería todo con los nombres que deseaba.

PD: Aquí hay un enlace para algunos conceptos básicos sobre alias en sql, ya que puede aliasar más que solo nombres de columnas https://www.w3schools.com/sql/sql_alias.asp

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!