Ios 如何从另一个子项查询子项。消防基地(SWIFT)
我正在开发一个送货应用程序。因此,我在firebase中使用productos和流行产品的方式如下:Ios 如何从另一个子项查询子项。消防基地(SWIFT),ios,swift,firebase,firebase-realtime-database,Ios,Swift,Firebase,Firebase Realtime Database,我正在开发一个送货应用程序。因此,我在firebase中使用productos和流行产品的方式如下: 产品 PopularProducts(产品ID作为键,true作为值) 如何仅查询使用这些child的受欢迎产品?您可以查询按esPopular子项订购的产品,并仅返回其等于true的子项 let ref = Database.database().reference(withPath: "productos") let query = ref.queryOrdered(byChil
- 产品
- PopularProducts(产品ID作为键,true作为值)
如何仅查询使用这些child的受欢迎产品?您可以查询按
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)
}
您可以查询按
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)
}
您需要获取
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")
}
})
不是完美的代码。应该做更多的功能。但这是一个好主意
希望对您有所帮助您需要获取
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")
}
})
不是完美的代码。应该做更多的功能。但这是一个好主意
希望对您有所帮助在这种情况下,您将下载每个对象,然后进行搜索,我记得。这不是一个好主意way@VladPulichev在这种情况下,客户端并不是下载每个对象。查询不会在客户端上进行,因此客户端只下载
esPopular
等于true的子项。好吧,没关系,它会在服务器上执行,但是的,我写错了。您不会下载所有数据。但服务器将在服务器端执行相同的操作。。例如,对于100000个对象,服务器将检查每个项目。这是没有效率的。请检查firebase文档。最佳做法是使用“true”值存储id数组。@VladPulichev这就是规则中的。indexOn
的目的,您可以使用它来提高查询性能。在这种情况下,您将下载每个对象,然后搜索,我记得。这不是一个好主意way@VladPulichev在这种情况下,客户端并不是下载每个对象。查询不会在客户端上进行,因此客户端只下载esPopular
等于true的子项。好吧,没关系,它会在服务器上执行,但是的,我写错了。您不会下载所有数据。但服务器将在服务器端执行相同的操作。。例如,对于100000个对象,服务器将检查每个项目。这是没有效率的。请检查firebase文档。存储具有“true”值的id数组是最佳做法。@VladPulichev这就是规则中的.indexOn
的目的,您可以使用它来提高查询性能。这个答案没有我的答案有效。您首先下载流行产品的密钥,然后对每个产品单独提出请求,这是不好的。@Callam在您的案例中有10000个对象,服务器端将检查每个对象。效率不高。在我的例子中,它将只下载必要对象的完整数据。他有一系列的身份证。他只需要下载带有这个id的物品。@Callam我认为最好的方式取决于Gustavo的完整逻辑。将来他可以用最好的方法来解决问题。无论如何问题是“如何从另一个孩子那里查询一个孩子”。这是我的答案。你根本不用这个数组。对于这个问题,我的答案更好。可能是(可能是,我们无法证明)更好的解决所有情况的方法是你的:)@Callam,谢谢你。Cz我不知道firebase有索引:)这个答案没有我的有效。您首先下载流行产品的密钥,然后对每个产品单独提出请求,这是不好的。@Callam在您的案例中有10000个对象,服务器端将检查每个对象。效率不高。在我的例子中,它将只下载必要对象的完整数据。他有一系列的身份证。他只需要下载带有这个id的物品。@Callam我认为最好的方式取决于Gustavo的完整逻辑。将来他可以用最好的方法来解决问题。无论如何问题是“如何从另一个孩子那里查询一个孩子”。这是我的答案。你根本不用这个数组。对于这个问题,我的答案更好。可能是(可能是,我们无法证明)更好的解决所有情况的方法是你的:)@Callam,谢谢你。Cz我不知道firebase有索引:)