javascript - Parse Cloud 代码 - 使用关系数据嵌套多个查询

标签 javascript parse-platform

我正在使用 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/

相关文章:

javascript - 牛队列并发问题

api - 无法使用 Parse Schema API 创建具有指针类型字段的类

javascript - 如何在 Parse Cloud Code 中获取对象

mongodb - 解析服务器:是否可以为 mongodb 连接提供根证书?

javascript - 如果用户登录使用 React 路由器重定向到仪表板?

javascript - javascript中归并排序的简单实现

javascript - Highcharts highstock x 轴最大/最小不适用于 3 个以上数据元素

javascript - 创建一个将参数转换为数组的函数

java - ParseFile 无法转换为 android

ios - 移动网络解析iOS SDK Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost."