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

380
Vistas
¿Cómo puedo eliminar las publicaciones marcadas del usuario (1) de la pestaña del usuario (2) después de que el usuario (1) elimine su cuenta?

Después de crear una API REST de node.js, express, mongoDb para una aplicación web de redes sociales con casi todas las acciones básicas de las redes sociales (iniciar sesión, registrarse, agregar una publicación, eliminar una publicación, eliminar una cuenta, seguir a los usuarios...), Actualmente tengo un problema en el que, después de implementar la función de marcar una publicación, no puedo encontrar una solución para eliminar una publicación marcada de la página de publicaciones marcadas de otro usuario, después de que el primer usuario elimine su cuenta. Proporcionaré mi código a continuación: (PS Bookmarks es una matriz dentro del modelo de usuario. También me gustaría mencionar los pasos que inicialmente pretendía para la tarea:

  1. Obtener usuario actual por ID

  2. Luego obtenga todas las publicaciones creadas por este usuario, lo que devuelve una matriz, así que lo asigné para obtener cada ID de publicación

  3. Después de eso, busqué a todos los usuarios de la aplicación e inicialmente tenía la intención de comparar las publicaciones que viven dentro de la matriz de marcadores dentro de cada usuario con las publicaciones que el usuario actual ha creado. Luego sacaría estas mismas publicaciones de la matriz de marcadores de cada uno de estos usuarios. --> Creo que la lógica que analicé es mantenible, pero simplemente no funciona conmigo. Este es el código a continuación:

    export const deleteUser = async (req, res) => { probar {

     let user = await User.findById(req.params.userId) const userPosts = await Post.find({ creatorId: user._id }) const allUsers = await User.find() const myPostsIds = userPosts.map((post) => post._id.toString())

//Esta es la sección que implementé para mi tarea, pero obviamente algo no está bien

 await Promise.all( myPostsIds.forEach((id) => allUsers.map((user) => { user.bookmarks.includes(id) && user.updateOne({ $pull: { bookmarks: id } }) }) ) ) await Post.deleteMany({ creatorId: user._id }) await user.remove() res.status(200).json({ message: "Account has been deleted successfully!", }) } catch (err) { errorHandler(res, err) }

}

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

0

Como mencioné en mis comentarios, el valor que pasa a Promise.all no es una matriz de Promise/matriz de funciones asíncronas.

El segundo error está dentro de la función forEach (actualmente) en .map() , no está devolviendo nada en la llamada de mapa.

Así que esto debería hacerlo:

 // first convert all ids to a promise await Promise.all(myPostsIds.map(id => new Promise(resolve => { // during this, await every test and update return Promise.all(allUsers.map(user => new Promise(resolve => { // if it includes the id, cast the update and then resolve if (user.bookmarks.includes(id)) { // if found, resolve the promise for this user after the change user.updateOne({ $pull: { bookmarks: id } }).then(resolve) } else { // resolve directly if not found. resolve() } // when all users are done for this id, resolve the Promise for the given id }))).then(resolve) })))

Un método más fácil de leer y más corto sería:

 for (const id of myPostIds) { for (const user of allUsers) { if (user.bookmarks && user.bookmarks.includes(id)) { await user.updateOne({ $pull: { bookmarks: id } }); } } }
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