解析云端查询以检索好友列表而不是(如Instagram)

时间:2017-10-13 13:25:00

标签: parse-platform parse-server

我有班级"用户" Parse Dashboad的默认值。我还有班级"朋友",我在这里存储用户之间的友谊,如下所示: 有两列," toUser"和" fromUser",显示两个用户中谁发送了好友请求。这两列是用户类的指针(指针< _User>)。

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

对此有什么合适的查询?

第一个逻辑上不应该扫描所有类用户,因为它可能会降低使用Ionic 3和Angular 4的应用程序的性能

谢谢

2 个答案:

答案 0 :(得分:0)

您不需要其他类来完成所有操作所需的是默认用户类中的关系列

添加新朋友,您只需要以下代码

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)
        }


      } 
    }); 

//你应该定义friends = [];在课堂上

答案 1 :(得分:0)

如果我理解了您的问题,您希望找到朋友请求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);
    });
  }
});