Tengo una función que se supone que me devuelve todas las preguntas sin respuesta de un usuario. Utiliza una "Selección" de monogodb-Collection para recuperar todos los question_id de las preguntas que el usuario aún no ha respondido.
Esto funciona perfectamente bien, siempre que el usuario haya respondido al menos una pregunta y la agregación no vuelva vacía.
exports.showUnansweredByUser = async (req, res, next) => { const user_id = req.params.user_id; try { const questionIds = await Selection.aggregate( [ { $match: { "user_id": user_id } }, { $unset: [ "user_id", "selected_answer", "_id", "__v" ] }, { $group: { "_id": "", "question_id": { $push: "$question_id" } } } ] ) if(questionIds !== null){ const idsArray = questionIds[0].question_id console.log(idsArray) } /*if(idsArray !== null){ const unansweredQuestions = await Question.aggregate( [ { $addFields: { _id: { $toString: "$_id" }} }, { $match: { _id: { $nin: idsArray}} } ] ) res.json(unansweredQuestions) } else { console.log("all questions are unanswered.") /!*const unansweredQuestions = await Question.aggregate( [ { $addFields: { _id: { $toString: "$_id" }} } ] ) res.json(unansweredQuestions)*!/ }*/ } catch (err){ res.json({message: "show by user is not working"}); } }Mi primera idea fue verificar si el idsArray resultante está vacío o no (como se muestra en el código comentado).
Mi segundo intento fue verificar si questionIds, el resultado de mi "esperar selección. agregado (..." está vacío.
Sé que supongo que la agregación vuelve "vacía" y mi Promesa de espera asincrónica nunca se cumple. Pero, ¿cómo manejo esto?
Quiero que funcione cuando hay una pregunta respondida alias. la Selección tiene un resultado y si no hay pregunta contestada aka. la Selección vuelve vacía.