1

假设我有一组“myObject”类的 PFObjects(本质上是字典)。此类的对象包含键“myDictionary”的字典。反过来,“myDictionary”有一个键“myKey”,我想访问它并搜索与“mySearchTerm”的匹配项。我不想下载所有 myObject 对象,然后遍历它们以检查每个对象中的 myKey,因为那样效率很低。我想使用一条findObjects消息只返回匹配项。

这样的查询可能吗?换句话说,如何在不下载该类的所有 PFObject 的情况下搜索分配给 PFObject 键的字典中的值?

如果有一个简单的方法,它可能看起来像这样,但我组成了 containsKey 部分来澄清我正在考虑的内容:

PFQuery *objectQuery = [PFQuery queryWithClassName:@"myObject"];
[objectQuery whereKey:@"myDictionary" ~containsKey~:@"myKey" equalTo:"mySearchTerm"];
4

3 回答 3

1

尝试使用带有谓词的查询:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"myDictionary.myKey = %@", @"mySearchTerm"];

PFQuery *objectQuery = [PFQuery queryWithClassName:@"myObject" predicate:predicate];
于 2013-06-28T22:19:15.793 回答
1

似乎最好的方法是使 myDictionary 本身成为一个 PFObject(因此将其实例化为 PFObject* 而不是 NSMutableDictionary*)。然后我可以查询它,然后在第二个查询中检索匹配项的父 PFObjects。

PFQuery *myDictionaryQuery = [PFQuery queryWithClassName:@"myDictionary"];
[myDictionaryQuery whereKey:@"myKey" equalTo:mySearchTerm];

PFQuery *myObjectQuery = [PFQuery queryWithClassName:@"myObject"];
[myObjectQuery includeKey:@"myDictionary"];
[myObjectQuery whereKey:@"myDictionary" matchesQuery:myDictionaryQuery];
于 2013-06-29T18:16:49.053 回答
0

我刚刚通过使用 NSPredicate 自己解决了这个问题:

NSString *value        =    @"myvalue";
NSPredicate *predicate =    [NSPredicate predicateWithFormat:@"myDictionary.myKey = %@",value];
PFQuery *query         =    [PFQuery queryWithClassName:@"ClassName" predicate:predicate];
[query includeKey:@"myDictionary"];
于 2017-11-21T22:26:40.863 回答