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

124
Views
Intentar pasar nuevos datos a un objeto sin reemplazar los datos antiguos en mongoDB desde nodejs con express

Estoy tratando de pasar datos nuevos a un objeto sin reemplazar los datos antiguos usando nodejs. La estructura de mi base de datos Mongodb (antes de agregar nuevos datos) está debajo

 { "_id" : ObjectId("58fd05f7fb69f42d54fccd12"), "Transaction" : { "QRIDNumber6666" : { "retailer" : "watson", "discount" : "10%", "tax" : "5%", "Transaction Detail" : [ { "quantity" : "1", "pname" : "coca", "price" : "3" }, { "quantity" : "3", "pname" : "pepsi", "price" : "5" } ] } } }

Lo que quiero lograr es agregar otro QRIDNumber en Transaction, Ej: QRIDNumber 7777, que tiene valores diferentes pero la misma estructura en comparación con QRIDNumber6666

Mi intento actual es usar el siguiente código en nodejs

 app.put('/contactlist/', function (req, res) { var id = "58fd05f7fb69f42d54fccd12"; db.CollectionName.findAndModify({ query: {_id: mongojs.ObjectId(id)}, update: {$set: {Transaction: req.body}}, new: true}); });

Nota: req.body son los detalles y valores de QRIDNumber7777 que se enviarán desde mi controlador.

El resultado final de mi código fue que simplemente reemplazó todo el contenido anterior en "Transacción" (QRIDNúmero6666) y lo reemplazó solo con contenido nuevo (QRIDNúmero7777).

Deseo que ambos datos permanezcan. Agregar nuevos contenidos en "Transacción" sin eliminar los antiguos

about 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Bien, asumiendo que siempre tendrás un objeto con 1 clave en req.body . Me gusta:

req.body = {"QRIDNumber7777": {...}}

Primero, necesitas saber el nombre de la clave:

 const insertedTransactionName = Object.keys(req.body)[0]; // QRIDNumber7777

Ahora puede actualizar su documento sin sobrescribir otros campos.

 app.put('/contactlist/', function(req, res) { var id = "58fd05f7fb69f42d54fccd12"; db.CollectionName.findAndModify({ query: { _id: mongojs.ObjectId(id) }, update: { $set: { [`Transaction.${insertedTransactionName}`]: req.body[insertedTransactionName] } }, new: true }); });

Tenga en cuenta esta línea:

 $set: { [`Transaction.${insertedTransactionName}`]: req.body[insertedTransactionName] }

En lugar de sobrescribir todo el documento Transaction , actualiza solo una propiedad anidada. Por lo tanto, aún quedan datos QRIDNumber6666 .

about 4 years ago · Santiago Trujillo Report

0

Debe actualizar su estructura a la matriz Transaction en lugar de crear claves dinámicas.

Esto lo ayudará más adelante cuando desee actualizar los campos individuales haciendo referencia al operador posicional.

Así que deberías cambiar tu estructura a

 { "_id" : ObjectId("58fd05f7fb69f42d54fccd12"), "Transaction" : [{ "QRIDNumber": 6666, "retailer" : "watson", "discount" : "10%", "tax" : "5%", "Transaction Detail" : [ { "quantity" : "1", "pname" : "coca", "price" : "3" }, { "quantity" : "3", "pname" : "pepsi", "price" : "5" } ] }] }

Use $push para agregar la nueva entrada 7777 a la matriz Transaction .

 app.put('/contactlist/', function (req, res) { var id = "58fd05f7fb69f42d54fccd12"; db.CollectionName.findAndModify({ query: {_id: mongojs.ObjectId(id)}, update: {$push: {Transaction: req.body}}, new: true}); });
about 4 years ago · Santiago Trujillo 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!