Estoy creando un cuestionario condicional en el que cada usuario debe responder algunas preguntas para registrarse. Cada pregunta siguiente aparecerá en función de la respuesta de la pregunta anterior enviada.
Entonces creo un esquema para preguntas y respuestas.
Esquema de preguntas:
_id: Object Id, name: String, text: String, hint: String, skip: boolean, type: String, // boolean, multiple, dropdown etc children: Array //Ojbect Ids of child questionEsquema de respuesta:
_id: Object Id, question_id: Reference Id, next_question: Reference Id, text: String, isBool: booleanEntonces, no creo que necesites niños ya que la próxima pregunta será determinada por next_question
Hay dos tipos de pregunta: 1. Normal, 2. Niño. Entonces, si algún usuario selecciona una pregunta que tiene hijos, debo mostrar las preguntas de los hijos en la misma página. Y si una pregunta no tiene hijos, los enviaré a la siguiente pregunta en una nueva pantalla.
Los niños mostrarán según la respuesta.
Por ejemplo P: ¿Tienes algún coche? Si el usuario hace clic en sí, muéstrele preguntas para niños que pueden solicitar información sobre el automóvil. Pero si el usuario selecciona no, no necesitamos hacer más preguntas para niños y lo redirigiré a la página siguiente que tiene una nueva pregunta.
En línea simple: la pregunta de los niños aparecerá en la misma página, la pregunta normal siempre aparecerá en una página nueva.
Tu pregunta es algo amplia. Y no sé si entendí bien, pero aquí va un intento.
Primero, modificaría un poco tu diseño.
Sabemos que cada pregunta tiene un montón de respuestas. Yo consideraría esa relación de uno a muchos. En MongoDB, hay dos formas recomendadas de modelar esa relación: usar documentos incrustados o referencias . Creo que esta última sería una elección ideal en tu caso. El beneficio de este enfoque es que podrá usar populate() para obtener fácilmente todas las respuestas relacionadas para cada pregunta. De lo contrario, su enfoque actual podría requerir que use algún tipo de agregación/búsqueda .
Ahora, cada respuesta determina a qué pregunta ir, ¿correcto? Entonces, no creo que necesite children ya que la próxima pregunta será determinada por next_question .
Así es como lo haría:
Esquema de preguntas
_id: Object Id, name: String, text: String, hint: String, skip: boolean, type: String, // remove children answers: Array of Reference IdsEsquema de respuesta
_id: Object Id, // remove question_id next_question: Reference Id, text: String, isBool: booleanP1: El administrador puede agregar/editar/eliminar la pregunta, ¿hay alguna actualización necesaria para este esquema?
Si está preguntando si necesita realizar algún cambio en el esquema con el requisito de que el administrador gestione las preguntas . Yo diría que no.
P2: ¿Cómo puedo administrar una pregunta anidada en la misma página, es decir, cómo sabrá el front-end que la próxima pregunta se mostrará en la misma página o en la siguiente? ¿Si agrego un campo más será suficiente?
Uh... ¿Si está preguntando cómo hacer que cada pregunta permanezca en la misma página sin recargar? entonces estás hablando de posiblemente AJAX.
En su aplicación Node, configuraría una ruta para obtener la "primera" pregunta con sus respuestas relacionadas y una ruta para obtener una pregunta "específica" por su ID con sus respuestas relacionadas.
Construiría su página de preguntas comenzando con la "primera" ruta. Cuando el usuario hace clic en una respuesta o algo así, haría una llamada AJAX a la ruta "específica" pasando la next_question relacionada como parámetro. Utilice la respuesta de la llamada para reconstruir la parte de la página.
Sin embargo, trabajar con la manipulación de AJAX y DOM, que son cuestiones completamente distintas.
P3: Cómo evitar el bucle de preguntas, es decir, Q1->Q2->Q3->Q1.
Supongo que la página para administrar cada pregunta con sus respuestas relacionadas tendrá un mecanismo para establecer la next_question para cada respuesta. El administrador puede simplemente asegurarse de que las next_question estén en orden.