从 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 个集合中解析查询的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB:在一个查询中从不同的集合中获取文档

表的集合操作

如何在 Flutter Firestore 中查询 2 个文档并作为列表返回?

如何从 GraphQL 查询中获取字段值?

从模拟器查询公共数据库时出现 Cloudkit 错误

MYSQL查一个字段中 多个值