Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

353
Visualizações
¿Cómo actualizo un objeto en Mongoose?

He tenido problemas al actualizar los datos en la base de datos usando mongoose, por lo tanto, gracias de antemano por la ayuda.

He estado enviando algunos datos desde un formulario dinámico que contiene un conjunto diferente de campos cada vez... pero cuando actualizo la matriz en la base de datos, cambia esos campos.

Esta fue mi función de controlador antes: -

 exports.savePageContent = (req, res, next) => { const id = req.body.dest; // getting page data document id delete req.body.dest; var arr = []; // When we are returning the same page each time after we submit the data for the particuklar section form then how are we supposed to redirect the user to next page once he is done doing all var fieldKeys = Object.keys(req.body); for(let i = 0; i < fieldKeys.length; i++) { arr.push({fieldRef : fieldKeys[i], fieldValue : req.body[fieldKeys[i]]}); } pageDataModel.findByIdAndUpdate(id, {pageData : arr}).exec(function(err, result) { if(err){ console.log(err); } else { console.log("data is inserted"); req.flash('message', "Data Saved Successfully"); } }) }

También probé algunas actualizaciones y luego me mudé a esta parte.

Esta es mi nueva función de controlador:

 exports.savePageContent = (req, res, next) => { const pageid = req.body.dest; // getting page data document id delete req.body.dest; var fieldRefData = ""; var fieldValueData = ""; var fieldKeys = Object.keys(req.body); for(let i = 0; i < fieldKeys.length; i++) { fieldRefData = fieldKeys[i]; fieldValueData = req.body[fieldKeys[i]]; try{ pageDataModel.update({id : pageid, "pageData.fieldRef" : fieldRefData}, {$set : {"pageData.$.fieldValue" : fieldValueData }}, {upsert : true}).exec(function(err, result) { if(err){ console.log(err); } else { console.log("data is inserted", result); } }); req.flash('message', "Data Saved Successfully"); }catch(e){ console.log(e); req.flash('message', "error Occurred updating Data "); } } }

Para elaborar el caso para una mejor comprensión: -

Estos son los datos que vienen por primera vez en el cuerpo.

 [ { fieldRef: 'sec1.1.h1', fieldValue: 'this is the field value 1' }, { fieldRef: 'sec1.1.p', fieldValue: 'this is the field value 1' }, { fieldRef: 'sec1.1.a', fieldValue: 'this is the field value 1' }, { fieldRef: 'sec1.2.h2', fieldValue: 'this is the field value 1' } ]

y Estos son los datos que vienen la segunda vez: -

 [ { fieldRef: 'sec2.1.h1', fieldValue: 'this the field value 2' }, { fieldRef: 'sec2.1.p', fieldValue: 'this the field value 2' }, { fieldRef: 'sec2.1.a', fieldValue: 'this the field value 2' }, { fieldRef: 'sec2.2.h1', fieldValue: 'this the field value 2' } ]

cuando quiero que ambos datos estén en la base de datos, pero cuando envío uno, el segundo dato, el primero se actualiza al segundo y viceversa.

esta es la db imágenes del escenario

estos son los datos en el documento en la primera operación

estos son los datos en el documento de la segunda operación

No puedo mantenerlos y actualizarlos a ambos... así que por favor ayúdenme...

Este es el error que recibo la mayor parte del tiempo que dice que la consulta es incorrecta

 MongoServerError: The positional operator did not find the match needed from the query. at /home/pushkar/Desktop/NodejsWebApp1/node_modules/mongodb/lib/operations/update.js:80:33 at /home/pushkar/Desktop/NodejsWebApp1/node_modules/mongodb/lib/cmap/connection_pool.js:272:25 at handleOperationResult (/home/pushkar/Desktop/NodejsWebApp1/node_modules/mongodb/lib/sdam/server.js:370:9) at MessageStream.messageHandler (/home/pushkar/Desktop/NodejsWebApp1/node_modules/mongodb/lib/cmap/connection.js:479:9) at MessageStream.emit (events.js:400:28) at processIncomingData (/home/pushkar/Desktop/NodejsWebApp1/node_modules/mongodb/lib/cmap/message_stream.js:108:16) at MessageStream._write (/home/pushkar/Desktop/NodejsWebApp1/node_modules/mongodb/lib/cmap/message_stream.js:28:9) at writeOrBuffer (internal/streams/writable.js:358:12) at MessageStream.Writable.write (internal/streams/writable.js:303:10) at Socket.ondata (internal/streams/readable.js:731:22) { index: 0, code: 2 }

Además, si no pude aclarar mi escenario, deje un comentario e intentaré explicarlo más claramente ... gracias de antemano

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

$set reemplazará un nuevo valor para la clave. Si usa el tercer valor, $set reemplazará el tercer valor, use $push en lugar del operador $set .https://docs.mongodb.com/manual/reference/operator/update/push/

over 4 years ago · Santiago Trujillo Relatório

0

Intente usar _id en lugar de id .

 pageDataModel.update({_id : pageid, "pageData.fieldRef"}) {

O incluso pageData._id en lugar de id .

 pageDataModel.update({'pageData._id' : pageid, "pageData.fieldRef"}) {

Además, su identificación es una string en la consulta, pero una object id en la base de datos, así que llame a un asistente.

 pageDataModel.update({'pageData._id' : mongoose.Types.ObjectId(pageid), "pageData.fieldRef"}) {
over 4 years ago · Santiago Trujillo Relatório

0

Espero que esto debería resolver el problema:

 pageDataModel.updateOne({_id : "61d73f31cb5681b85618995a", "pageData.fieldRef" : "sec2.c" },{"$set" : {"pageData.$.fieldValue" : "Mkc" }}).exec(function(err, result) { if(err) throw err; else { console.log(result); } });
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda