[英]Social network on Parse having more than 1000 followers. How to get latest posts for all?
我们正在基于Parse的AnyPic教程构建一个社交网络应用。
Anypic使用以下代码从关注者那里获取最新帖子:
PFQuery *followingActivitiesQuery = [PFQuery queryWithClassName:kPAPActivityClassKey];
[followingActivitiesQuery whereKey:kPAPActivityTypeKey equalTo:kPAPActivityTypeFollow];
[followingActivitiesQuery whereKey:kPAPActivityFromUserKey equalTo:[PFUser currentUser]];
followingActivitiesQuery.cachePolicy = kPFCachePolicyNetworkOnly;
followingActivitiesQuery.limit = 1000;
PFQuery *autoFollowUsersQuery = [PFUser query];
[autoFollowUsersQuery whereKey:kPAPUserAutoFollowKey equalTo:@YES];
PFQuery *photosFromFollowedUsersQuery = [PFQuery queryWithClassName:self.parseClassName];
[photosFromFollowedUsersQuery whereKey:kPAPPhotoUserKey matchesKey:kPAPActivityToUserKey inQuery:followingActivitiesQuery];
[photosFromFollowedUsersQuery whereKeyExists:kPAPPhotoPictureKey];
PFQuery *photosFromCurrentUserQuery = [PFQuery queryWithClassName:self.parseClassName];
[photosFromCurrentUserQuery whereKey:kPAPPhotoUserKey equalTo:[PFUser currentUser]];
[photosFromCurrentUserQuery whereKeyExists:kPAPPhotoPictureKey];
PFQuery *query = [PFQuery orQueryWithSubqueries:[NSArray arrayWithObjects:photosFromFollowedUsersQuery, photosFromCurrentUserQuery, nil]];
[query setLimit:30];
[query includeKey:kPAPPhotoUserKey];
[query orderByDescending:@"createdAt"];
如您所见,这段代码将仅获得前1000个关注者及其帖子。 但是我们想考虑一个用户关注超过1000个用户的可能性。 在留在Parse的查询限制中时,从我关注的人那里获取所有最新帖子的最佳方法是什么?
PS:当我搜索Google时,遇到了一个建议,告诉我们可以将lastPostedAt变量存储到_User对象,并根据此变量对查询进行排序。 但是,即使不太可能,我追踪的每个用户也有可能最近发布过。
您应该进行一个循环,在该循环中它会自动跳过已获取的对象。 这可以在解析的cloudcode中完成。
看下面的例子:
Parse.Cloud.job("fetchMenus", function(request, status) {
var LocationSP, counter, query;
counter = 0;
LocationSP = Parse.Object.extend("Location");
query = new Parse.Query(LocationSP);
query.doesNotExist("menu");
query.equalTo("city_lc", "new york");
return query.each(function(location) {
if (counter % 100 === 0) {
status.message(counter + " users processed.");
}
return Parse.Cloud.run('getMenu2', {
alias: location.get("location_id")
}).then(function(result) {
counter += 1;
return Parse.Promise.as("1");
}, function(error) {
return Parse.Promise.as("1");
});
}).then(function() {
return status.success("Migration completed successfully.");
}, function(error) {
return status.error("Uh oh, something went wrong." + error);
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.