2011-12-07 67 views
2

我有一個需求,我需要得到用戶的朋友。我做了兩個名爲User和Friends的集合。 ,我用從朋友和用戶訪問數據的代碼是:加入像mongodb查詢

var friend = Friends.find({acceptor:req.currentUser.id,status:'0'},function(err, friends) { 
    console.log('----------------friends-----------------'+friends.length); 

    }); 

的console.log是給我想要的結果friends.Now如果我使用的朋友訪問等給出了一個用戶數據我沒有得到我需要的結果。

var user = User.find({_id:friend.requestor},function(err, users) { 
    console.log('----------------user-----------------'+users.length); 
}); 

如何加入這兩個查詢,以獲得所需result.Please幫助

+1

我認爲這是你的數據庫設計的問題,而不是如何查詢這個......將朋友作爲ID數組添加到用戶模式中。然後查詢用戶(並獲得數組),然後得到所有的朋友用戶(http://stackoverflow.com/questions/5818303/how-do-i-perform-this-query-in-mongoose-mongodb-for -node-JS)。 – pkyeck

+0

pkyeck是正確的,你應該添加朋友的數組,因爲這樣你只需要執行一個查詢=>優化 – alessioalex

+0

是的,它的工作方式.had渲染文件的問題,如果我使用loop.Use陣列消除了。謝謝 –

回答

3

我建議您嘗試進行非規範化的數據,而不是下降的SQL路徑:

User { 
    "FirstName" : "Jack", 
    "LastName" : "Doe", 
    // ... 
    // no friend info here 
} 

將非規範化信息放入朋友列表中。不要使用嵌入式數組,因爲您每次獲取用戶時可能不需要獲取所有的朋友id。數據結構的細節取決於要支持(定向與非定向等)的關係,但它大致是這樣的:

FriendList { 
    OwnerUserId : ObjectId("..."), 
    FriendUserId : ObjectId("..."), 
    FriendName: "Jack Doe" 
    // add more denormalized information 
} 

現在,要顯示的用戶的好友列表:

var friends = db.FriendList.find({"OwnerUserId" : currentUserId}); 

缺點是,如果朋友改變了她的名字,你必須更新該名字的所有引用。另一方面,這個邏輯是微不足道的,並且(通常更常見的)查詢「獲取所有朋友」是超級快速,易於編碼和易於頁面化的。