即時開發交付應用程序。所以,我有PRODUCTOS和流行的產品在火力點是這樣的:如何從另一個孩子查詢孩子。 Firebase(SWIFT)
- 產品
- PopularProducts(產品ID爲關鍵和值true)
我如何只查詢使用這些孩子的流行產品?
即時開發交付應用程序。所以,我有PRODUCTOS和流行的產品在火力點是這樣的:如何從另一個孩子查詢孩子。 Firebase(SWIFT)
我如何只查詢使用這些孩子的流行產品?
你需要得到的productosPopulares
數組,然後獲得每個對象。
let referenceToProductosPopulares = FIRDatabase.database().reference(withPath: "productosPopulares")
referenceToProductosPopulares.observeSingleEvent(of: .value, with: { snapshot in
if let value = snapshot.value as? NSDictionary {
let productosPopIds = value.allKeys as! [String]
// get every object
for id in productosPopIds {
let refToProd = FIRDatabase.database().reference(withPath: "productos").child(id)
refToProd.observeSingleEvent(of: .value, with: { snapshot in
// your value
})
}
} else {
print("productosPopulares")
}
})
不完美的代碼。應該做更多的功能。但這是主意。
希望它有幫助
您可以通過esPopular
孩子查詢訂購,只返回等於true
的孩子。
let ref = Database.database().reference(withPath: "productos")
let query = ref.queryOrdered(byChild: "esPopular").queryEqual(toValue: true)
query.observe(.childAdded, with: { (snapshot) in
print(snapshot)
}) { (error) in
print(error)
}
在這種情況下,您將下載每個對象,然後搜索,我記得。這不是一個好方法 –
@VladPulichev在這種情況下,客戶端不會下載每個對象。查詢不會發生在客戶端,因此客戶端只會將「esPopular」等於true的孩子下載。 – Callam
好吧,沒關係,它會做服務器,但是,我寫錯了。你不會下載所有的數據。但服務器端會在服務器端做同樣的事情。例如,100000個對象服務器將檢查每個項目。這不是有效的。 –
這個答案不如我的效率高。您首先要下載受歡迎產品的密鑰,然後對每個產品提出單獨的請求,這是不好的。 – Callam
@Callam在你的情況下用10000個對象服務器端會檢查每個對象。這不是有效的。在我的情況下,它會下載只有必要的對象的完整數據。他有一系列Id。他只需要下載帶有這個ID的項目。 –
@Callam我認爲最好的方式取決於古斯塔沃的完整邏輯。將來他可以用最好的方式來解決他的問題。無論如何。問題是「如何查詢另一個孩子的孩子」。這是我的答案。你根本不用這個數組。我的回答對這個問題更好。可能(可能,我們無法證明它)更好的方式爲所有情況將是你的:) –