【问题标题】:Adding a user to PFRelation using Parse Cloud Code使用 Parse Cloud Code 将用户添加到 PFRelation
【发布时间】:2014-04-21 06:12:13
【问题描述】:

我在我的 iPhone 应用中使用 Parse.com。

我之前遇到了一个问题,我试图将当前登录的用户添加到另一个用户的名为“friendsRelation”的 PFRelation 键/列,这基本上是朋友列表。

唯一的问题是,除了当前登录的用户之外,不允许您将更改保存给任何其他用户。

然后我了解到,您可以使用一种解决方法,将“主密钥”与 Parse Cloud Code 一起使用。

我最终将这里的代码添加到我的 Parse Cloud 代码中:https://stackoverflow.com/a/18651564/3344977

这很好用,我可以成功测试它并将 NSString 添加到 Parse 数据库中的字符串列/键。

但是,我不知道如何修改 Parse Cloud 代码以让我将用户添加到另一个用户的 PFRelation 列/键。

在过去的 2 个小时里,我一直在尝试使用我链接到的上述 Parse Cloud 代码进行所有操作,但无法正常工作,然后我意识到我的问题出在实际的云代码上,而不是我的状态尝试在 xcode 中使用它,因为就像我说的那样,我可以让它成功添加一个 NSString 对象用于测试目的。

我的问题是我不懂javascript,不懂语法,所以我不知道如何更改用javascript编写的云代码。

我需要编辑我在上面链接到的 Parse Cloud 代码,我还将在此问题的末尾粘贴它,以便我可以将当​​前登录的 PFUser 对象添加到另一个用户的 PFRelation 键/列。

我在 Objective-c 中用来做这件事的代码是:

[friendsRelation addObject:user];

所以我很确定这与将对象添加到数组中是一样的,但就像我说的那样,我不知道如何修改 Parse Cloud 代码,因为它是在 javascript 中的。

这是 Parse Cloud 代码:

Parse.Cloud.define('editUser', function(request, response) {
    var userId = request.params.userId,
        newColText = request.params.newColText;

    var User = Parse.Object.extend('_User'),
        user = new User({ objectId: userId });

    user.set('new_col', newColText);

    Parse.Cloud.useMasterKey();
    user.save().then(function(user) {
        response.success(user);
    }, function(error) {
        response.error(error)
    });
});

下面是我在 xcode 中使用 Objective-c 的方法:

[PFCloud callFunction:@"editUser" withParameters:@{
    @"userId": @"someuseridhere",
    @"newColText": @"new text!"
}];

现在只需要修改它以将当前 PFUser 添加到另一个用户的 PFRelation 列/键,我很确定从技术上讲只是将一个对象添加到一个数组中。

这对于熟悉 javascript 的人来说应该相当简单,所以非常感谢您的帮助。

谢谢。

【问题讨论】:

标签: javascript ios objective-c parse-platform pfrelation


【解决方案1】:

我建议您重新考虑您的数据模型,并从用户表中提取以下内容。当您规划数据模型时,尤其是 NoSQL 数据库,您应该首先考虑您的查询并围绕它规划您的结构。对于移动应用程序尤其如此,因为服务器连接成本很高,而且如果您的应用程序执行大量连接,通常会引入延迟问题。

在用户类中存储关注可以很容易地找到一个人在关注谁。但是,您将如何解决找到所有关注您的用户的任务?如果您处于他们的追随者关系中,则必须检查所有用户。这不会是一个有效的查询,而且它不能很好地扩展。

在规划社交应用程序时,您应该构建可扩展性。我不知道您正在构建什么样的社交应用程序,但想象一下,如果该应用程序一发不可收拾并迅速取得成功。如果你不为可扩展性而构建,它很快就会分崩离析,你就有可能失去一切,因为应用程序突然变得迟缓,因此无法使用(人们对等待移动应用程序的容忍度几乎为零)。

忘记之前关于一致性和规范化的所有优先事项,并设计可扩展性。

为了存储关注者和关注者,请为这两者中的每一个使用单独的“表”(Parse 类)。对于每个用户,存储他们关注的所有用户名(或他们的 objectId)的数组。对追随者做同样的事情。这意味着当您选择关注某人时,需要更新两个表:您将其他用户的用户名添加到您关注的人的数组中(在 followings 表中),并且您还添加了您的用户名到另一个用户的 followers 表的数组。

使用此方法,获取关注者和关注者列表非常快。

看看这个用于 Cassandra NoSQL 数据库的 Twitter 示例实现: https://github.com/twissandra/twissandra

【讨论】:

  • 嗨。非常感谢,真的帮助我设计了我的系统。但是,我不确定我是否理解为追随者和追随者准备 2 张桌子的必要性。既然您将其他人的用户名/objectId 存储在相关数组中,那么 2 个表的意义何在?你能说明一下吗?
  • 我不确定我是否理解您的问题,但请记住,每个人都有关注者和关注其他人。当我关注你时,应用程序需要快速获取我和所有其他关注者的列表,因此你需要 1 条记录,其中包含所有关注者的数组。但是,当应用程序需要显示您关注的用户时,我们无法扫描所有关注者记录并跟踪包含您的用户(不会扩展)。要快速查找您关注的人,您需要在下表中创建自己的记录,其中包含您关注的所有人的数组。
  • 请记住,即使您可以通过其他方式获得相同的结果,但这并不是为查询而设计的。这在为移动设备开发时尤其重要。
  • 我最近想了很多,我肯定认为我的最后一个问题现在没有意义:D 这是一个有趣的问题,将追随者和追随者分开是一个非常好的解决方案。我想知道是否还有其他方法可以实现这一目标?例如,作为我目前的要求:在 2 个用户互相关注时 - 必须执行特殊操作。
  • @Handsomeguy,我认为 pe60t0 的模型很好。根据他们的问题,他们似乎正在创建朋友关系,而不是追随者/被追随者关系。在朋友关系中,默认情况下,两个作为朋友的用户会互相关注,没有回旋余地(即一个用户关注另一个但没有被关注的情况)。鉴于我的解释是正确的,这种方法不是很好吗?获取您的朋友列表不只是一个查询吗?如果我遗漏了什么,请您详细说明您的解决方案,因为我的应用程序处于同一位置
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-17
  • 2017-02-28
  • 2015-05-29
  • 2018-12-20
  • 1970-01-01
相关资源
最近更新 更多