0

我的应用程序使用 Parse 作为后端。在应用程序的某个时刻,我必须查询应该至少包含另一个数组中的一个标签的对象。为了清楚起见,在数据库中我有一个图片类,它有一个标签属性,将标签保存在一个数组中。在我的应用程序中,我有一组需要比较的标签。仅应获取至少具有存储在 Tags 属性中的标签之一的对象。我尝试使用以下 PFQuery 函数whereKey:containedIn:whereKey:containsAllObjectsInArray:但是它们都没有我想要的。现在我将注意力转移到 NSPredicates 上。我尝试了以下方法:

PFQuery *postsQuery = [PFQuery queryWithClassName:@"Pictures" predicate:[NSPredicate predicateWithFormat:@"ANY Tags MATCHES ANY ", _tags]];

当我运行代码时,我收到以下错误:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unable to parse the format string "ANY Tags MATCHES ANY "'

我如何针对我的情况执行这样的查询或正确的 NSPredicate?

作为进一步解释查询的说明:假设数据库中的一个对象在“标签”列中有以下内容

Tags = ["music", "video", "picture", "chocolate"]

我想在谓词中使用的标签数组如下:

tagsArray = @["picture", "French"];

我期待的是接收前一个对象,因为它具有“图片”标签。如果另一个对象至少不包含 tagsArray 中的一个标签,则不应获取它。

Edite: 我发现我不能使用聚合操作,例如 ANY、SOME、ALL 或 NONE。我能找到另一个解决方案吗?

4

3 回答 3

1

另一种解决方案是使用云代码并用 Javascript 在服务器上编写查询。

然后,您只需访问您定义的新 API 端点并以这种方式获取查询结果。

于 2014-03-25T13:29:19.673 回答
0

好的,我发现在这种情况下使用whereKey:ContainedIn:实际上是可行的。我的问题是我错误地传递了一系列字典。我想使用的是由字符串制成的。

于 2014-03-25T13:58:11.950 回答
0

这是如何在 swift 4 中使用 NSPredicate 的示例

    let predicate1 = "\(PFUser.current()!.objectId!)\(userObj.objectId!)"
    let predicate2 = "\(userObj.objectId!)\(PFUser.current()!.objectId!)"

    let predicate = NSPredicate(format:"\(CHATS_ID) = '\(predicate1)'  OR  \(CHATS_ID) = '\(predicate2)' ")
    let query = PFQuery(className: CLASS_NAME, predicate: predicate)
于 2019-04-17T02:21:47.963 回答