很抱歉,我在parse.com的帮助部分有这个问题,但现在他们决定转移到stackoverflow来解决他们的问题。
我试图在iOS上制作类似Facebook的应用程序,只是为了测试Parse并查看它是否适用于商业项目。我为这个问题道歉,但我对关系数据库没有任何了解。
以下是我的课程:用户帖子评论
在用户内部,我有一个名为" array_friends"它有一个PFUser(指针)数组,是我当前用户的朋友。我想做的是:
1.-向我当前的用户查询他的所有帖子
2.-向我的当前用户查询他的每个帖子有多少评论
3.-查询我当前的用户以获取他的朋友列表(返回PFUser数组)
4.-查询每个朋友(PFUser)以及该用户的帖子
5.-向每个朋友查询该用户的每个帖子的评论数
我可以做第1,2和3项,但是关于它,我认为第3项也存在问题。对于第3项(查询我自己的朋友列表),我这样做:
NSArray *allFriendsObjects = [currentUser objectForKey:@"array_friends"];
但问题在于它返回了这个:
"<PFUser:U0ivpIhDvx:(null)> {\n}"
现在的问题是,我如何有效地(不做多个循环)查询我的帐户中的朋友的每个用户的所有评论?我基本上坚持第4和第5项。
如果您需要其他信息,请与我们联系。
谢谢。
更新
PFQuery使用Timothy Walters&#39;建议:
PFQuery *query = [PFUser query];
[query includeKey:@"array_friends"];
[query getObjectInBackgroundWithId:[[PFUser currentUser] objectId]
block:^(PFObject *userWithFriends, NSError *error)
{
NSArray *allFriendsObjects = userWithFriends[@"array_friends"];
NSLog(@"allFriendsObjects = %@", allFriendsObjects);
PFQuery *postsQuery = [PFQuery queryWithClassName:@"Post"];
[postsQuery whereKey:@"user" containedIn:allFriendsObjects];
[postsQuery getObjectInBackgroundWithId:[[PFUser currentUser]objectId]
block:^(PFObject *object, NSError *error)
{
NSLog(@"object = %@", object);
}];
}];
然后第一个查询返回这个(这很好):
allFriendsObjects = (
"<PFUser:U0ivpIhDvx:(null)> {\n email = \"demo@demo.com\";\n \"name_first\" = Demo;\n \"name_last\" = Tester;\n \"profile_picture\" = \"<PFFile: 0x9b6cb90>\";\n username = \"demo@demo.com\";\n}",
"<PFUser:HjZJpWkejl:(null)> {\n email = \"tester@test.com\";\n \"name_first\" = test;\n \"name_last\" = test;\n username = \"tester@test.com\";\n}"
)
然后第二个查询(postsQuery)返回:
Error: no results matched the query (Code: 101, Version: 1.2.19)
object = (null)
这是我的课程在Parse中的样子: 用户类
帖子课
答案 0 :(得分:1)
关于评论计数,您应该使用Cloud Code来保持更新号码,文档中有一个样本,用于保存评论数量的帖子:
https://parse.com/docs/cloud_code_guide#functions-aftersave
您也可以对此进行扩展,以便commentCount
增加User
。然后你只需阅读用户/帖子上的一个数字属性,即可知道有多少条评论,而无需进行大量查询。
关于3号,只需对User类进行查询,然后调用includeKey:
让所有朋友回到一个查询中:
PFQuery *query = [PFUser query];
[query includeKey:@"array_friends"];
[query getObjectInBackgroundWithId:[[PFUser currentUser] objectId]
block:^(PFObject *userWithFriends, NSError *error) {
NSArray *allFriendsObjects = userWithFriends[@"array_friends"];
// do something with results...
}];
关于4号,请使用已保存的朋友阵列:
PFQuery *postsQuery = [PFQuery queryWithClassName:@"Post"];
[postsQuery whereKey:@"author" containedIn:allFriendsObjects];
[postsQuery findObjectsInBackgroundWithBlock:^(NSArray *posts, NSError *error) {
NSLog(@"Posts: %@", posts);
}];
这将收回所有朋友的所有帖子(每个查询最多有1000个记录限制,100是默认限制)...如果需要或者在一个客户端显示它们,你可以将它们分开合并清单。
我建议按createdAt
降序排序,一次分页20条记录。