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:
- NombreDelCurso, NombreUsuario1, CorreoElectrónicoUsuario1
- NombreDelCurso, NombreUsuario2, CorreoElectrónicoUsuario2
- NombreDelCurso, NombreUsuario1, CorreoElectrónicoUsuario1
- NombreDelCurso, NombreUsuario2, CorreoElectrónicoUsuario2
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 bucleeach request in requests
.Para solucionar el problema, puedes mover el bucle
each request in requests
dentro de la declaraciónif
para limitar su ejecución solo a las solicitudes relevantes: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: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 bucleeach
luego itera sobre esta matriz aplanada para generar el resultado deseado.