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

197
Views
¿Cómo actualizar datos con valores duplicados usando Knex?

Digamos que tengo esta matriz de datos:

 const ids = [ '7d8206d2-74bc-4b90-a237-37f92486cde4', 'e594fe7f-d529-4a2f-ab24-ffc4e102268c', '7d8206d2-74bc-4b90-a237-37f92486cde4' ]

Como puede ver, hay ID duplicados y cuando quiero actualizarlo así:

 await knex("products") .increment("purchasesCount") .whereIn("id", ids)

En mi columna de purchasesCount , puedo ver los valores (1, 1) , pero debería ser (2, 1) debido a las identificaciones duplicadas. ¿Hay alguna forma de arreglarlo?

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

0

La solución más sencilla es emitir una consulta por cada compra, de la siguiente manera:

 for (const id of ids) { await knex("products").increment("purchasesCount").where({ id: id }); }

Si esto es imposible por alguna razón (por ejemplo, el rendimiento), entonces tiene 2 opciones:

  1. Realice depósitos en memoria y cuente cuántos de cada ID obtuvo. Luego, haga un montón de incrementos con .whereIn("id", idsWithThisCountOnly) . Entonces, en el ejemplo anterior, haría 2 actualizaciones, una para todas las identificaciones que se encontraron solo una vez en la matriz y otra para todas las identificaciones que se duplicaron. Probablemente necesitará un Map of id => count para contar duplicados, y deberá invertirlo más tarde en la forma de count => idsWithThisCountOnly[] .
  2. No almacene recuentos en la base de datos en absoluto. Almacene solo los ID, duplicados y use GROUP BY con COUNT cuando recupere los datos. Esto debería ofrecer un mejor rendimiento de escritura (las INSERCIONES suelen ser más rápidas que las ACTUALIZACIONES), pero con un mayor tamaño de almacenamiento y lecturas más lentas.

La opción 2 puede ser preferible si ya tiene una tabla de "transacciones" o "ventas" con elementos de línea y accede a los datos de resumen con poca frecuencia.

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!