Metero从id的两个集合中获取数据

时间:2016-03-07 12:09:05

标签: javascript mongodb meteor reactjs

我有两个集合,一个包含用户配置文件,另一个包含用户朋友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;
  } 

1 个答案:

答案 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