es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Pug iteración dame datos duplicados.

Entonces utilicé bucles pug para mostrar 2 documentos de mi colección, pero cuando los muestra, los muestra dos veces.
Aquí está el código:

            each request in requests
              -if(request.course.master.id===user.id)
                each reqUser in request.course.users 
                  tr
                    td=request.course.name
                    td=reqUser.name
                    td=reqUser.email

Este es un documento de solicitud de mi colección de solicitudes:

_id:61c879ab1fd17239e85a8b7a
duration:Array
price:Array
createdAt:2021-12-26T14:16:55.302+00:00
expiresAt:
2022-01-25T14:16:55.302+00:00
accepted:true
course:ObjectId("61b60458acbb1fa4598eea36")
user:ObjectId("61c879941fd17239e85a8b68")
id:"63341"

Tengo acceso al curso de esta solicitud y quiero al usuario de este curso.

También este es el documento del curso de mi colección de cursos:

_id:ObjectId("61b3708276844971620c98ea")
images:Array
users:Array
name:"assembly"
imageCover:"course-assembly"
duration:Array
master:ObjectId("61c2bfc0ac2f110af04903a2")

En el código pug de arriba, primero quiero verificar si el usuario actualmente conectado es el propietario del curso dado o no; luego, si es verdadero, quiero crear una fila para cada usuario del curso, pero da 2 filas completamente iguales para cada usuario en esta forma:

  1. NombreDelCurso, NombreUsuario1, CorreoElectrónicoUsuario1
  2. NombreDelCurso, NombreUsuario2, CorreoElectrónicoUsuario2
  3. NombreDelCurso, NombreUsuario1, CorreoElectrónicoUsuario1
  4. NombreDelCurso, NombreUsuario2, CorreoElectrónicoUsuario2
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema que estás enfrentando es causado por el uso de bucles anidados en la plantilla Pug. Específicamente, el bucle each reqUser in request.course.users se está ejecutando varias veces debido a que está anidado dentro del bucle each request in requests.

    Para solucionar el problema, puedes mover el bucle each request in requests dentro de la declaración if para limitar su ejecución solo a las solicitudes relevantes:

    each request in requests
      -if(request.course.master.id === user.id)
        each reqUser in request.course.users
          tr
            td=request.course.name
            td=reqUser.name
            td=reqUser.email
      -else
        continue
    

    Alternativamente, podrías usar una consulta más específica para obtener solo las solicitudes relevantes, evitando así la necesidad de la declaración if y el bucle anidado por completo:

    each reqUser in db.collection('requests')
        .find({ "course.master.id": user.id })
        .flatMap(req => req.course.users)
      tr
        td=reqUser.course.name
        td=reqUser.name
        td=reqUser.email
    

    Esta consulta recupera todas las solicitudes cuyo ID del curso maestro coincide con el ID del usuario actual, luego utiliza la función .flatMap() para obtener una matriz de todos los usuarios en esos cursos. El bucle each luego itera sobre esta matriz aplanada para generar el resultado deseado.

Comments are closed.