在StackOverflow上一樣(沒有什麼關係,但它是一個很好的例子)的應用程序,我們有Question
秒。我們的mongodb的集合中的每個Question
具有Answer
秒的陣列,和Vote
秒(或者upvoting或downvoting)的陣列。MongoDB - 子子女?
在每個Answer
中,有可能User
對其投票或降低投票。
所以該模式會是這個樣子:
Question
-> Answers []
-> Votes []
-> value (-1/1)
-> username
-> Votes []
-> value (-1/1)
-> username
-> question_text, etc.
從一個MySQL背景這個模式感到「噁心」來,但我一直深信這是一種行業慣例。
現在,我目前需要向每位用戶展示他們已投票的內容,包括Question
s和Answer
s。
所以,如果我必須找到一個用戶投票的Answer
,我想正是如此查詢(在節點):
question_collection.find(
{'question.answers.votes.username': username}, function(e,d) {
/* do stuff */}
);
該查詢變爲4級深。這是一個正常的做法,或者我應該在模式中引入一些規範化?