在mongodb中join查询

我有一个需求,我需要得到用户的朋友。 我做了两个名为用户和朋友的集合。 我用来访问朋友和用户的数据的代码是:

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

console.log给我的朋友期望的结果。现在,如果我使用的朋友访问用户数据就像给定的我没有得到我需要的结果。

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

我怎样才能join这两个查询来获得所需的结果。请帮助

       

网上收集的解决方案 "在mongodb中join查询"

我build议你尝试去规范化的数据,而不是沿着SQLpath:

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

把非规范化的信息放在朋友列表中。 不要使用embedded式数组,因为每次获取用户时可能不需要获取所有的朋友id。 数据结构的细节取决于你想要支持的关系(定向与无向等),但是大致看起来像这样:

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

现在,要显示用户的朋友列表:

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

缺点是,如果一个朋友改变了她的名字,你将不得不更新该名字的所有引用。 另一方面,这个逻辑是微不足道的,并且(通常更常见的)查询“获取所有朋友”是超快的,易于编码的,并且易于分页。