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

135
Vistas
Actualice un objeto único o múltiple en una matriz con datos específicos de la solicitud

No soy muy bueno con la técnica avanzada de MongoDB. Mi registro en mongo db collection

 { "_id": ObjectId("1"), "manager": ObjectId("12345"), "code": "PS", "title": "Performance System", "users": [ { "_user": ObjectId("1"), "role": "Member", }, { "_user": ObjectId("2"), "role": "Member", }, { "_user": ObjectId("3"), "role": "Member", } ], }

Node.js/ExpressJS

Creé una API para actualizar la matriz como se muestra a continuación, pero no funcionó.

 const updateProjectMember = asyncHandler(async (req, res) => { const { userID, role } = req.body.userData; try { const project = await Project.updateMany( { _id: req.params.projectID }, { $set: { "users.$[selectedUser].role": role } }, { arrayFilters: { "selectedUser._user": { $in: userID } } } ); res.status(200).json(project); } catch (error) { res.status(400); throw new Error(error); }

Uso el parámetro API para obtener la ID del proyecto. Aquí los datos del cuerpo de la solicitud

 { userID : ["2","3"]; role: "Admin" }

Entonces, la API obtendrá una matriz de ID de usuario para que coincida y establecerá todos los campos de "rol" en "Administrador" para que coincidan.

Quería que los datos fueran así.

 { "_id": ObjectId("1"), "manager": ObjectId("12345"), "code": "PS", "title": "Performance System", "users": [ { "_user": ObjectId("1"), "role": "Member", }, { "_user": ObjectId("2"), "role": "Admin", }, { "_user": ObjectId("3"), "role": "Admin", } ], }

¿Estoy haciendo la práctica correcta? Si es una mala práctica, cuál es la mejor manera de resolver esto.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

La consulta esta bien. Solo asegúrese de pasar el valor con el tipo exacto como en el documento MongoDB.

 var mongoose = require('mongoose'); const updateProjectMember = asyncHandler(async (req, res) => { const { userID, role } = req.body.userData; userID = userID.map(x => mongoose.Types.ObjectId(x)); try { const project = await Project.updateMany( { _id: mongoose.Types.ObjectId(req.params.projectID) }, { $set: { "users.$[selectedUser].role": role } }, { arrayFilters: { "selectedUser._user": { $in: userID } } } ); res.status(200).json(project); } catch (error) { res.status(400); throw new Error(error); } }
about 4 years ago · Juan Pablo Isaza 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