我正在查询解析Databse的大约1000个用户,我必须遍历每个名称才能找到其中的一些。这是我的查询代码,
int count = arrPeopleName.count;
for (int i =0; i<count; i++) {
PFQuery *query = [PFUser query];
[query whereKey:@"username" containsString:[arrPeopleName objectAtIndex:i]];
}
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
NSLog(@"USERS %@",objects); }];
这里人名数组是带有一些名字的静态数组。所以我想 for循环+ RegEx查询,非常昂贵这里效率较低但我找不到合适的查询,即查找匹配名称。所以如果我在数组中只有 JOH ,我仍然应该 JOHN,JOHNSON 等。
所以对此有任何好的想法。我在想这里有一些批量查询?如果您能建议我更好的解决方案,我们将非常感激。非常感谢所有人。
答案 0 :(得分:0)
您可以在查询中使用数组:
PFQuery * query = [PFUser query];
[query whereKey:@"username" containedIn:arrPeopleName];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
NSLog(@"USERS %@",objects);
}];
这将返回所有用户的用户名与arrPeopleName中存储的任何用户名匹配。
<强>更新强>
在我看来,你有两个选择,因为Parse没有部分匹配的API支持。
Hector在Parse上建议的一个选项是使用beforeSave云代码钩子,您可以将信息拆分为令牌以在另一个字段中存储为数组。这似乎是一种hacky解决方法,但我想它可以工作。这意味着当你将“johnson”存储为用户名时,beforeSave函数会将其分成像“jo”,“joh”,“john”,“johns”,“johnso”,“ohn”,“son”这样的标记。等,并将它们存储在一个数组中。您可以稍后将搜索字符串与此数组中的值进行比较(存储在Parse表中的另一个字段中)。我想这可行,但对我的口味来说似乎有点过于讨厌。
另一个选择是完全在客户端解决它。正如您所说,正则表达式查询效率不高,并且在较大的数据集上无法很好地扩展。你可以做匹配的客户端,也有一些缓存。
这两种方法都在Parse的论坛帖子中解释: https://parse.com/questions/partial-match-for-query
似乎你必须选择两个不好的选择之一。对不起,我无法提供更多帮助。我很想听听你最终的结果!