从 2 个集合中解析查询
Posted
技术标签:
【中文标题】从 2 个集合中解析查询【英文标题】:Parse Query from 2 Collections 【发布时间】:2018-08-28 10:09:32 【问题描述】:我在 ios Swift 应用程序中使用 Parse,但无法找出如何对两个集合进行查询,我猜这类似于连接。
我有一组列表,它们包含家庭信息和用户 ID。我向用户集合添加了一个键值,指示用户是否正在度假。我要做的查询是查找用户未休假的所有列表。
这是用于检索列表的解析代码,但我不知道如何从用户集合中添加第二个条件。
let query = PFQuery(className: "Listing")
query.order(byDescending: "createdAt")
query.whereKey("categoryHome", equalTo: type.rawValue)
query.limit = limit
query.skip = skip
query.findObjectsInBackground (objects, error) -> Void in
if let objects = objects as? [Listing]
success(objects)
else
let error = error! as NSError
let errorMessage = "\(error.localizedDescription)\n(\(error.code))"
SVProgressHUD.showError(withStatus: errorMessage)
我打算做这样的事情来查询用户,但我需要将它添加到上面的查询中。
let userQuery = PFUser.query()
userQuery.whereKeyDoesNotExist("onVacation")
那么,我如何将这些结合起来进行一个查询,以查找用户未休假的所有列表?
如果有人可以向我展示一个快速的 sn-p,或者向我指出一个对两个集合执行查询的示例,那就太好了。我已经阅读了关于关系、查询等的解析文档,但仍然无法理解如何将上面的两个查询放在一起。
感谢您的帮助。
【问题讨论】:
【参考方案1】:从您的帖子中不清楚您如何将用户与列表关联,但假设列表具有指向用户的指针,那么您可以执行类似的操作
var userQuery = PFUser.query()
userQuery!.whereKeyDoesNotExist("onVacation")
var listQuery = PFQuery(className:"Listing")
listQuery.whereKey("categoryHome", equalTo: type.rawValue)
listQuery.whereKey("user", matchesQuery: userQuery!)
listQuery.findObjectsInBackgroundWithBlock
(results: [PFObject]?, error: NSError?) -> Void in
if error == nil
// results will contain lists where the user is not on vacation
如果您想了解更多关于matchesQuery
的信息,请查看Parse iOS guide
【讨论】:
天啊,我想这就是我想要的。谢谢你,我会试试的。而且,为了回答您的问题,我有从列表中获取的用户 ID……事后看来,它应该是一个用户指针。再次感谢,我会尽快尝试。 @LilMoke 即使在您只使用用户 ID 的情况下,您也可以使用matchesKeyInQuery
代替(其中 userId 和 objectId 是您匹配的两个键)。不过要小心 matchQuery,因为如果您的查询不是很有选择性并且您有大量集合,它们可能会非常低效
啊,很高兴知道。是的,我明白了,我一定错过了matchesQuery。感谢您的提示。以上是关于从 2 个集合中解析查询的主要内容,如果未能解决你的问题,请参考以下文章