我的新项目需要一些帮助。我正在创建一个条件问卷,每个用户需要回答几个问题才能注册。 每个下一个问题都将根据之前提交的问题答案显示。
所以我创建了问题和答案的模式。
问题架构:
_id: Object Id,
name: String,
text: String,
hint: String,
skip: boolean,
type: String, // boolean, multiple, dropdown etc
children: Array //Ojbect Ids of child question
回答架构:
_id: Object Id,
question_id: Reference Id,
next_question: Reference Id,
text: String,
isBool: boolean
感谢高级人员。
所以,我不认为你需要孩子,因为下一个问题将是 由next_question确定
有两种类型的问题1.Normal,2.Child。因此,如果任何用户选择有孩子的问题。我需要在同一页面上显示孩子的问题。如果问题没有任何孩子,我会在新屏幕上将他发送到下一个问题。 孩子们会根据答案展示。 例如问:你有车吗?如果用户点击是,显示他/她的孩子可能会询问汽车信息的问题。但是用户选择否,我们不再需要再问孩子问题,我将重定向到下一页有新问题。
简单地说:儿童问题将出现在同一页面上,正常问题将始终出现在新页面上。
答案 0 :(得分:0)
你的问题有点广泛。而且我不知道我是否理解正确,但这是一次尝试。
首先,我会稍微修改你的设计。
我们知道每个问题都有很多答案。我会考虑一对多的关系。在MongoDB中,有两种推荐的建模方式:使用embedded documents或references。我认为后者在你的情况下是一个理想的选择。这种方法的好处是,您可以使用populate()
轻松获取每个问题的所有相关答案。否则,您当前的方法可能需要使用一些aggregation/lookup。
现在,每个答案都会确定要转到哪个问题,对吗?因此,我认为您不需要children
,因为下一个问题将由next_question
确定。
这是我将如何做到的:
问题架构
_id: Object Id,
name: String,
text: String,
hint: String,
skip: boolean,
type: String,
// remove children
answers: Array of Reference Ids
回答架构
_id: Object Id,
// remove question_id
next_question: Reference Id,
text: String,
isBool: boolean
Q1:管理员可以添加/编辑/删除问题,因此有任何更新 需要这个架构吗?
如果您要求是否需要对架构进行任何更改,并要求管理员管理问题?我会说不。
Q2:如何在同一页面上管理嵌套问题,即如何管理前端 会知道下一个问题会在同一页面或下一页显示吗?如果我加 还有一个领域就足够了吗?
呃......如果你问如何让每个问题都保留在同一页面上而不重新加载?那么你所说的可能是AJAX。
在你的Node应用程序中,我会设置一条路径来获取"第一个"问题及其相关答案和获得特定"的路线。其ID及其相关答案的问题。
您将构建问题页面,首先是"第一个"路线。当用户点击答案或其他内容时,您将对"特定的"进行AJAX调用。路由传递相关的next_question
作为参数。使用调用的响应重建页面的一部分。
但是,working with AJAX和DOM操作都是它自己的其他问题。
问题3:如何避免问题循环,即Q1-> Q2-> Q3-> Q1。
我假设管理每个问题及其相关答案的页面将有一个机制来为每个答案设置next_question
。管理员可以简单地确保next_question
符合规定。