使用数组过滤Firebase查询?

时间:2017-10-11 23:41:40

标签: swift firebase firebase-realtime-database geofire

我正在创建一个简单的Tinder克隆来学习Firebase,而且我不确定如何在此Firebase查询中添加过滤器(我使用GeoFire在半径范围内搜索):

//get closest user for next game within radius
let center = CLLocation(latitude: latitude, longitude: longitude)
var circleQuery = geoFire.query(at: center, withRadius: 149.0)

var queryHandle = circleQuery?.observe(.keyEntered, with: { (key: String!, location: CLLocation!) in
    print("Key '\(key)' entered the search area and is at location '\(location)'")

我需要过滤掉当前用户已接受/拒绝的用户。我可以为当前用户添加一个包含已接受/已拒绝用户的数组,但我担心每次在查询中返回子进行迭代时都会占用大量数据。

1 个答案:

答案 0 :(得分:0)

你需要有一系列匹配/拒绝。您可以在用户对象中存储一个数组以进行拒绝和匹配,但是您需要使用firebase安全规则,这样您就可以选择向具有匹配列表的用户公开哪些数据/拒绝用户ID。

由于接受的列表存储在两个用户的用户对象中,您最终会得到一些重复的数据,但这就是firebase的本质。这样做不会导致任何性能挂起或任何事情。

如果您按照我在此处建议的方式进行操作,当您创建要刷卡的用户卡列表时,您只需使用通配符(Firebase在技术上不支持通配符,但他们的文档解释了一种解决方法这个)用户ID,然后设置在潜在匹配被拒绝的数组中找不到当前用户ID的位置。我已将过滤文档作为参考链接。

https://firebase.google.com/docs/database/ios/lists-of-data#filtering_data