鉴于用户的标准用例能够喜欢帖子。
并使用解析示例
var user = Parse.User.current();
var relation = user.relation("likes");
relation.add(post);
user.save();
每个帖子保持总点数的最佳方法是什么?我应该:
使用beforeSave增加post对象上的total like计数器 用户寻找obj.isDirty("喜欢")然后数字的云代码钩子 以某种方式添加了哪个对象(我不确定在这种情况下发现添加了哪个帖子)
在解析中创建一个单独的like对象并对其进行计数查询 它(可能不是因为parse建议不要进行计数查询)
同时在产品客户端增加like计数器 用户正在向其用户关系添加帖子(安全问题和 同步问题?)
答案 0 :(得分:2)
这是一个非常好的,深思熟虑的问题。看看你的想法:
似乎很自然地在帖子上放了一个喜欢的计数器,并且自然地保存在用户之前保存。但是你也是对的,脏信息(据我所知)并没有告诉你足够的关系,这个关系的哪个方面是新的。因此,我排除了这个好主意。
考虑一个" join table"也是合理的,我相信无论如何,解析器正在为你做多对多关系。好处是你可以使用它进行计数查询。我不知道parse建议不要进行计数查询。您必须维护此表,这将是从用户到帖子或帖子到用户的额外步骤,但我认为这是可行的。
让客户端在帖子上进行增量没有错。但是你再次说得对,这意味着你将允许客户写信不是他们自己的帖子,所以帖子' ACL必须更弱。我不会担心同步......如果我们需要按照时间对照喜欢帖子和计算喜欢的时间,我们会完全设计其他东西,可能没有parse.com。
我想我会选择(4)。哪个是想法(3)在云功能中运行。 (这实际上是beforeSave的手动形式,基本上是想法(1))。
Parse.Cloud.define("userLikesPost", function(request, response) {
// so we can leave posts ACL restricted to the creator
Parse.Cloud.useMasterKey();
var post;
var postId = request.params.postId;
var query = new Parse.Query("Post");
query.get(postId).then(function(result) {
post = result;
post.increment("likeCount", 1);
return post.save();
}).then(function() {
var user = request.user;
user.add("likes", post);
return user.save();
}).then(function(result) {
response.success(result);
}, function(error) {
response.error(error);
});
});