解析云权查询检索Friendslist而不是(像Instagram)

问题描述:

我有类“用户”默认的解析Dashboad。我也有班级“朋友”,我在这里存储用户之间的友谊: 有两列“toUser”和“fromUser”,它们显示了两个用户发送好友请求的人。这两列是指向用户类的指针(指针< _User>)。解析云权查询检索Friendslist而不是(像Instagram)

我的概念是检索两个列表: 1.好友列表,为用户的登录用户 2.用户列表(谁不是朋友与登录的用户)

什么是对的合适查询?

逻辑第一个不应该扫描所有的类用户,因为它可能被利用离子3应用程序和角4

的性能比较慢下来谢谢

你并不需要另一个类这样做,你需要的是在默认的用户类别的关系列

增加新的朋友,你只需要下面的代码

var friendtoadd 
//this is the friend object from parse user class you want to add you can get it by anyway you want 
var currentUser = Parse.User.current(); 
var relation = currentUser.relation("friends"); 
relation.add(friendtoadd) 
currentUser.save(); 

检索的朋友阵列的登录的用户可以使用以下代码

var currentUser = Parse.User.current(); 
    var friendRelation = currentUser.relation('friends'); 
    var env = this 
    friendRelation.query().find({ 
    success: function(users) { 
     for (var i = 0; i< users.length; i++) { 
     var object = users[i]; 
     env.friends.push(object) 
     console.log(env.friends) 
     } 


     } 
    }); 

//你应该定义的朋友= [];在类

+0

通过这种方式获取与当前用户不是朋友的用户列表是坏主意,因为他可能有0个朋友,在这种情况下,您将运行一个非常缓慢的查询来获取数据库的所有用户 –

+0

谢谢你的马科斯,我明白了,但是我需要班级“朋友”,因为我从中检索了额外的信息,比如朋友请求发送的用户的推送和本地通知。并且你对所有用户的查询都是正确的,只想通过在用户输入用户名时筛选搜索用户来限制它,例如instagram。但是,怎么..?总的来说,我需要instagram的哲学 – giorgionasis

如果我明白你的问题的权利,你想找到你的朋友请求你sent,或者你的received。因为我不知道你在哪里与用户和他的朋友建立了关系。 这是代码,如果你想这样做使用云代码:

首先,我确认被保存在friendRequest的参数:

Parse.Cloud.beforeSave("Friends", function(request, response){ 
    var friendRequest = request.object; 
    if (!friendRequest.has("toUser") || !friendRequest.has("fromUser")) { 
    response.error("Invalid parameters"); 
    return; 
    } 
    response.success(); 
}); 

然后我创建了两个云功能,一个用于检索sentRequests

Parse.Cloud.define("getSentRequests", function(request, response){ 
    var query = new Parse.Query("Friends"); 
    query.equalTo("fromUser", request.user); 
    if (!request.master) { 
    query.find({ sessionToken: request.user.getSessionToken() }).then(function(friends){ 
     response.success(friends); 
    }); 
    }else{ 
    query.find({useMasterKey:true}).then(function(friends){ 
     response.success(friends); 
    }); 
    } 
}); 

,你可以从一个登录的用户或使用masterKey,如果你想和其他查询是针对recievedRequests称之为:

Parse.Cloud.define("getRecievedRequests", function(request, response){ 
    var query = new Parse.Query("Friends"); 
    query.equalTo("toUser", request.user); 
    if (!request.master) { 
    query.find({ sessionToken: request.user.getSessionToken() }).then(function(users){ 
     response.success(users); 
    }); 
    }else{ 
    query.find({useMasterKey:true}).then(function(users){ 
     response.success(users); 
    }); 
    } 
}); 
+0

谢谢Abubakr。我附上图像更加水晶。表级“朋友”已经存储了朋友。谁发送了请求,谁收到了它。作为登录用户,我想检索我的朋友[链接](https:// imgur。com/a/XWWT8) – giorgionasis

+0

对不起,我不熟悉离子3和角4,但有一点研究,我发现你可以调用函数名称并使用提供程序拦截结果,我不完全了解如何发布回答如果你找到正确的代码。 –

+0

我知道如何调用云功能,但在此之前,我应该定义数据库的结构或查询的概念以检索我想要的东西 – giorgionasis