2013-02-27 60 views
0
User{ 
     '_id' : ObjectId(..), 
     'Friends': [{_id : ref1},{id : ref2}] 
     'Posts' : [{'popularity' :103,...}, {'popularity' : 86,...} 
} 

而且每個鏈接到另一個朋友的用戶ID的引用。 從所有用戶朋友中獲得最受歡迎的帖子的最快方式是什麼? 也許只是前20如何彙總來自MongoDB中引用的數據?

回答

0

的MongoDB允許靈活的架構設計,彌補了沒有加入。所以,我在此架構假定的關係是「雙向」(即,如果我是你的朋友,那麼你就在我的朋友陣列和我在你的朋友陣列是?)

在你能做到這一點的情況下下面彙總查詢:

db.users.aggregate([ 
    {$match : { "Friends._id": <my _id> } }, 
    {$unwind : "$Posts" }, 
    {$sort : { "Posts.popularity" : -1 }, 
    {$limit : 20 } 
]) 

基本上,誰擁有我自己的朋友陣列中的所有用戶過濾器,放鬆自己的崗位陣列,排序得到與最高人氣第一和限制帖子頂部20

如果你沒有「Friends._id」的索引,這不會是一個快速查詢。

+0

這就是它。我不相信我在Friends._id上添加了一個索引。這會像使用ensureindex一樣簡單嗎? – carboncomputed 2013-02-28 00:35:38

+1

是的,但記住這是一個阻止操作,除非您使用「background:true」選項。 http://docs.mongodb.org/manual/reference/method/db.collection.ensureIndex/ – 2013-02-28 00:39:06