使用 Parse 和 Swift 的一个键上的两个查询约束

Posted

技术标签:

【中文标题】使用 Parse 和 Swift 的一个键上的两个查询约束【英文标题】:Two Query Constraints On One Key with Parse and Swift 【发布时间】:2014-12-02 16:01:49 【问题描述】:

伙计们,我正在尝试获取用户名未包含在数组中的所有 PFUser (dontShowUsers。我还想使用变量 name 限制查询,该变量获取用户名等于名称的所有用户用户搜索。但是当我这样做时:

findUsers.whereKey("username",containsString:name)
findUsers.whereKey("username",notContainedIn:dontShowUsers)

每个用户都显示。它执行这两个查询,并将它们加在一起。我想用第二个whereKey 约束第一个whereKey。解决此问题的最佳方法是什么?

【问题讨论】:

查看parse.com/questions/… 我已经检查过了,我不知道如何使用containsAllObjects实现搜索功能 你不能做一个查询,然后过滤结果以找到与另一个匹配的结果吗?或者可以在云代码中做到这一点。或者,如果 don't-show 属性对于用户来说是一致的,则可以在用户对象中有一个单独的 bool 列,您可以在该列上进行查询。 【参考方案1】:

这是一种方式

println(geoPoint)
user["location"] = geoPoint
let rejectedUsers: [String] = user["rejected"].copy() as [String]
let acceptedUsers: [String] = user["accepted"].copy() as [String]
let ignoredUsers = rejectedUsers + acceptedUsers

var query = PFUser.query()
query.whereKey("location", nearGeoPoint: geoPoint)
query.whereKey("username", notEqualTo: user.username)
query.whereKey("gender", equalTo: user["interestedIn"])
query.whereKey("username", notContainedIn: ignoredUsers)
query.limit = 10
query.findObjectsInBackgroundWithBlock(
    (objects: [AnyObject]!, error2: NSError!) -> Void in
    if error2 != nil 
        println(error2)
     else 
        if objects.isEmpty 
            println("empty query")
         else 
            for object in objects 
                self.usernames.append(object.username)
                self.userImages.append(object["image"] as NSData)

注意我必须如何从解析中复制我的用户 [“拒绝”] 数组 然后我用 + 创建“ignoredUsers”

然后我就可以使用了:

query.whereKey("username", notContainedIn:ignoreUsers)

【讨论】:

【参考方案2】:

我想说你可以在不使用 2 个约束的情况下解决这个问题,就在你执行查询之前,检查 name 是否在数组中,如果不是,则执行查询。

【讨论】:

以上是关于使用 Parse 和 Swift 的一个键上的两个查询约束的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 性能:两个表在公共外键上的连接:仍然“使用 where”

如何使用 swift 从 Parse 上的用户指针中检索数据

同一主键上的EF多个外键关系

私人聊天应用程序 - Parse 和 Swift

SQL Server Profiler 中的死锁图显示同一集群键上的互锁

1006. 求和游戏