我的数据库如下:
{
"products" : {
"accessory" : {
"acc01" : {
"ean" : 8793462789130,
"name" : "Some product acc01"
},
"acc02" : {
"ean" : 8793462789134,
"name" : "Some product acc02"
}
},
"cpu" : {
"cpu01" : {
"ean" : 8793462789115,
"name" : "Some product cpu01"
},
"cpu02" : {
"ean" : 8793462789116,
"name" : "Some product cpu02"
},
"cpu03" : {
"ean" : 8793462789117,
"name" : "Some product cpu03"
}
},
"ios" : {
"ios01" : {
"ean" : 8793462789120,
"name" : "Some product ios01"
},
"ios02" : {
"ean" : 8793462789123,
"name" : "Some product ios02"
},
"ios03" : {
"ean" : 8793462789125,
"name" : "Some product ios03"
},
"ios04" : {
"ean" : 8793462789123,
"name" : "Some product ios04"
}
}
}
}
我设法获取了所有产品,并将它们存储在数组中,如下所示:
static func getAvailableProducts(completion: @escaping ([Product]) -> Void) {
self.ref.child("products").queryOrderedByKey().observeSingleEvent(of: .value) { (snapshot) in
var products = [Product]()
for category in snapshot.children.allObjects as! [DataSnapshot] {
let productCategory = category.key
for product in category.children.allObjects as! [DataSnapshot] {
let identifier = product.key
if let productCategory = Category(rawValue: productCategory),
let ean = product.childSnapshot(forPath: "ean").value as? Int,
let name = product.childSnapshot(forPath: "name").value as? String {
let productToAdd = Product(identifier: identifier, category: productCategory, ean: ean, name: name)
products.append(productToAdd)
}
}
}
completion(products)
}
}
现在我不了解的是如何获得具有特定ean
代码的节点。到目前为止,我已经尝试过:
static func getProduct(by ean: Int, completion: @escaping (Product) -> Void) {
self.ref.child("products").queryOrdered(byChild: "ean").queryEqual(toValue: ean).observeSingleEvent(of: .value) { (snapshot) in
if snapshot.exists() {
// Create product and return with completion
}
}
}
不幸的是,快照不存在-所以我的查询显然是错误的...我确实知道ean
键在以下一级,但是我确实想查询所有类别的所有产品。
任何提示都值得赞赏!