Tengo una matriz de objetos con la siguiente estructura:
const myArr = [{ 'name':'question1', 'grade':6 }, { 'name':'question2', 'grade':7 }]colección de preguntas :
{ _id:623749f845844e7d273d801c, questions:[ { 'name':'question1', 'grade':10, 'someInfo':'blabla', _id:623749f845844e7d273d801m }, { 'name':'question2', 'grade':10, 'someInfo':'blabla', _id:623749f845844e7d273d801a }, { 'name':'question3', 'grade':10, 'someInfo':'blabla', _id:623749f845844e7d273d801f } ] } Solo quiero actualizar todos los objetos en las questions de la matriz en la colección que proporcioné en la matriz myArr . Entonces el resultado deseado debería ser:
{ _id:623749f845844e7d273d801c, questions:[ { 'name':'question1', 'grade':6, 'someInfo':'blabla', _id:623749f845844e7d273d801m }, { 'name':'question2', 'grade':7, 'someInfo':'blabla', _id:623749f845844e7d273d801a }, { 'name':'question3', 'grade':10, 'someInfo':'blabla', _id:623749f845844e7d273d801f } ] } Lo que he encontrado hasta ahora:
Logré actualizar grade cuando especifico el question name con el operador posicional:
await Prijave.updateOne( { _id: mongoose.Types.ObjectId(q_id), 'questions.name': 'question1', }, { $set: { 'questions.$.grade': '10', }, } ) Pero, ¿cómo hacer esto para cada elemento en myArr ? Podría hacer un bucle forEach que itera a través myArr y llamar a updateOne para cada elemento, pero no creo que deba hacerse de esa manera porque hará una conexión múltiple a la base de datos en lugar de una.