2013-07-30 144 views
0

我有一個存儲帖子相關信息和作者信息的帖子集合。這是一個嵌套樹。 然後我有一個postrating集合,它存儲哪個用戶對某個帖子進行了上或下的評分。mongodb - 將列添加到一個集合中查找基於另一個集合中的值

當請求獲取特定帖子的嵌套樹時,如果當前用戶已投票,並且如果是,則在每個返回的帖子上向上或向下,我也需要返回。

在SQL中,這將類似於「posts。*,postrating.vote from post join postrating on postID and postrating.memberID = currentUser」。

我知道MongoDB不支持連接。 MongoDB有什麼選擇?

  1. 使用map reduce - 性能爲簡單查詢嗎?
  2. 在郵件文檔中存儲收視率--BSON大小限制?
  3. 獲取所有必填帖子的列表。獲取當前用戶所有投票的列表。在帖子上循環,如果用戶已投票添加到輸出?

還有別的辦法嗎?這可以使用聚合完成嗎?

注意:我上週開始使用MongoDB。

回答

0

在MongoDB中,最簡單的方法可能是使用應用程序端邏輯處理此問題,而不是在單個查詢中嘗試使用。有很多方法來構造您的數據,但有以下一種可能性:

user_document = { 
    name : "User1", 
    postsIhaveLiked : [ "post1", "post2" ... ] 
    } 

post_document = { 
    postID : "post1", 
    content : "my awesome blog post" 
    } 

使用此結構,您將首先查詢用戶的user_document。然後,對於每個返回的帖子,您可以檢查帖子的postID是否在該用戶的「postsIhaveLiked」列表中。

與此相關的主要想法是,你得到你的數據分兩步,而不是一個。這與加入不同,但是基於使用一個密鑰(在這種情況下爲postID)的相同基本思想來關聯兩個不同的數據片段。

通常,爲了避免性能原因,儘量避免使用map-reduce。對於這個簡單的用例,聚合不是你想要的。

+0

我最終以類似的方式實現它。 – MavWolverine

相關問題