我有两个集合,一个包含用户配置文件,另一个包含用户朋友userFriend包含数组呼叫朋友,它将包含该特定用户的朋友。这两个集合之间的关系是user_id。我刚刚写了一个函数来获取一个用户朋友的个人资料,它正在工作。但我想知道是否有任何其他更好的方法,而不是逐个检索它。请找到以下方法。
import UserFriends from 'TruthHurts/collections/UserFriends';
import UserProfile from 'TruthHurts/collections/UserProfile';
getUserFriends: function(userId){
var resutls= [],userProfiles;
var UserFriendsList = UserFriends.findOne({userId: userId});
for(var i = 0; i < UserFriendsList.friends.length; i++){
userProfiles = UserProfile.findOne({userId: UserFriendsList.friends[i].friend_id});
if(userProfiles){
resutls.push(userProfiles);
}
}
return resutls;
}
答案 0 :(得分:0)
我会使用MongoDB的内置for
运算符,而不是使用id
循环并对每个$in
分别进行查询:
getUserFriends: function(userId){
var UserFriendsList = UserFriends.findOne({
userId: userId
});
// To extract friend_id's from friends array and store it in such a way that:
// UserFriendsList.friends = ["1","2","3",...]
UserFriendsList.friends.forEach(function(each, index, array) {
array[index] = each.friend_id;
});
var userProfiles = UserProfile.find({
_id: {
$in: UserFriendsList.friends // $in matches against every _id in friends array
}
}).fetch();
return userProfiles;
}
此方法应优于使用for
循环和单个findOne
查询。有关参考,请参阅此SO post。