Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

127
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda