我正在使用 Parse 的云代码编写一个方法,该方法将返回包含两个子数组的数组。其中一个数组是团队数组,另一个数组是包含这些团队成员的数组。目的是获取团队及其团队成员的列表。数组将传递到 iOS 前端进行显示。
我的数据当前的结构是,有一个团队对象可以拥有多个用户,但一个用户只能拥有一个团队。
这是我现在的云函数:
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 很困难。有没有更好的方法来嵌套它们?我尝试过 Promise,但不熟悉 Javascript Promise。我发现了类似的帖子,但没有一个能解决我遇到的问题。有什么建议吗?
最佳答案
您可以使用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 更改它,但不要忘记考虑到这一点。
关于javascript - Parse Cloud 代码 - 使用关系数据嵌套多个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28427554/