2017-04-20 41 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的順序。