2017-10-11 92 views
0

我創建一個簡單的火種克隆學習火力地堡,我不知道如何過濾器添加到這個火力地堡查詢(我使用GeoFire到的半徑範圍內搜索):使用數組過濾Firebase查詢?

//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)'") 

我需要過濾掉當前用戶已經接受/拒絕的用戶。我可以爲當前用戶添加一個包含已接受/已拒絕用戶的數組,但是我擔心每次在查詢中返回一個子元素時都會遍歷數組,這可能會消耗大量數據。

+0

有沒有簡單的方法來添加附加條件到GeoFire查詢。您將必須對客戶端代碼中的附加條件進行過濾。 –

回答

0

您需要擁有該匹配/拒絕數組。您可能會將數組存儲在用戶對象中以進行拒絕和匹配,但是您需要使用Firebase安全規則,以便您可以選擇要公開給具有匹配列表的用戶的數據/被拒絕的用戶ID。

由於接受的列表存儲在兩個用戶用戶對象中,您最終還會得到有些重複的數據,但這就是firebase的性質。這樣做不會導致任何性能問題或任何事情。

如果按照我在這裏所建議的方式進行操作,當您創建用戶卡刷卡列表時,您只需使用通配符(Firebase技術上不支持通配符,但其文檔解釋了一種方式圍繞此)爲用戶標識,然後設置您的當前用戶標識在潛在匹配拒絕數組中找不到的位置。我將過濾文檔鏈接爲參考。

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