我正在使用Parse的Cloud Code编写一个返回的方法和包含两个子数组的数组。 on array是一个团队数组,另一个是包含这些团队成员数组的数组。目的是获取团队及其团队成员的列表。阵列将传递到iOS前端进行显示。
我的数据目前是结构化的,因此有一个Team对象可以有多个用户,但用户只能有一个团队。
这是我现在的云功能:
var arrayOfUsers = [];
var arrayOfTeamMembers = [];
var arrayOfTeams = [];
Parse.Cloud.define("GetTopTeams", function(request, response) {
var query = new Parse.Query("Teams");
arrayOfTeams = [];
arrayOfTeamMembers = [];
fullArray = [];
query.find().then(function(teams) {
//returns a raw list of teams
return teams;
}).then(function(teams) {
arrayOfUsers = [];
teams.forEach(function(team) {
//add team to subArray1
arrayOfTeams.push(team);
//searches for all users within the team
var memberQuery = new Parse.Query(Parse.User);
memberQuery.equalTo('team', team);
memberQuery.find().then(function(tMember) {
//adds the team member to initial array
arrayOfUsers.push(tMember);
});
}).then(function(){
//pushes the finished array to the team member array
return arrayOfTeamMembers.push(arrayOfUsers);
}).then(function() {
return arrayOfTeams;
});
}).then(function() {
return response.success([arrayOfTeams, arrayOfTeamMembers]);
});
});
我能够填充arrayOfTeams但是获得arrayOfTeamMembers证明是困难的。是否有更好的方法来嵌套它们?我尝试过承诺但不熟悉Javascript承诺。我发现了类似的帖子但没有解决我遇到的问题。有什么建议吗?
答案 0 :(得分:1)
您可以使用Underscore。它已在Cloud Code中提供。使用它,您只需要一个查询。你可以这样写:
var memberQuery = new Parse.Query(Parse.User);
memberQuery.exists("team");
memberQuery.include("team");
memberQuery.find().done(function(users){
var usersGroupedByTeam = _.groupBy(users, function(user) {
return user.get("team").id;
});
var arrayOfTeams = _.chain(users)
.map(function(user) { return user.get("team"); })
.uniq(function(team) { return team.id; })
.value();
response.success({
arrayOfTeams: arrayOfTeams,
usersGroupedByTeam: usersGroupedByTeam
});
}).fail(function(error){
//error handle
response.error(error.message);
});
我建议你将结果作为对象而不是数组返回。在最终结果中,您将拥有小组(arrayOfTeams
),并按小组(usersGroupedByTeam
)对您的用户进行分组。
要检索特定团队的用户,您将使用usersGroupedByTeam["A_TEAM_ID"]
。
注意:请记住,默认情况下,Parse.Query只会带来100条记录。您可以使用Parse.limit更改它,但不要忘记考虑这一点。