2017-04-20 44 views
0

我需要一些帮助来完成我的新项目。我正在创建一个有条件的问卷,每个用户都需要回答几个问题才能注册。 每个下一个问题都会根据提交的上一个问题答案出现。需要调查条件问卷的建议mongo db中的模式

所以我创建了问题和答案的架构。

提问模式:

_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 
  • 问题1:管理员可以添加/编辑/删除的问题所以没有任何更新 要求到这个模式?
  • 问题2:如何管理 同一页面上的嵌套问题,即前端如何知道下一个问题将显示在相同的 页面或下一页上?如果我再添加一个字段就足够了?
  • 问题3:如何 避免问题循环即Q1-> Q2-> Q3-> Q1。

感谢先进的家伙。

所以,我不认为你需要的孩子,因为下一个问题将通过 next_question

确定有两种类型的问题1.Normal,2.Child的。所以,如果任何用户选择有孩子的问题。我需要在同一页面上显示儿童问题。如果问题没有任何孩子,我会在新的屏幕上发给他下一个问题。 孩子将根据回答显示。例如问:你有车吗?如果用户点击是,显示他/她的孩子可能会问汽车信息的问题。但用户选择不,我们不需要再问任何问题,我将重定向到有新问题的下一页。

简单的说:孩子的问题会出现在同一页面上,正常的问题会一直出现在新的页面上。

回答

0

你的问题有点宽泛。而且我不知道我是否理解正确,但是这是一个尝试。

首先,我会稍微修改一下你的设计。

我们知道每个问题都有一堆答案。我会考虑这种一对多的关系。在MongoDB中,有两种推荐的建模方式:使用embedded documentsreferences。我认为后者将是您的理想选择。这种方法的好处是,您可以使用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和相关答案获取“特定”问题。

您将构建以“第一个”路线开始的问题页面。当用户点击某个答案或某物时,您可以对通过相关next_question作为参数的“特定”路由进行AJAX调用。使用调用的响应来重建页面的一部分。

然而,working with AJAX和DOM操作都是它自己的其他问题。

Q3:如何避免Q1-> Q2-> Q3-> Q1问题回路。

我假设管理每个问题及其相关答案的页面将有一个机制来为每个答案设置next_question。管理员可以简单地确保next_question的顺序。