即时开发交付应用程序。所以,我有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我认为最好的方式取决于古斯塔沃的完整逻辑。将来他可以用最好的方式来解决他的问题。无论如何。问题是“如何查询另一个孩子的孩子”。这是我的答案。你根本不用这个数组。我的回答对这个问题更好。可能(可能,我们无法证明它)更好的方式为所有情况将是你的:) –