Firebase查询特定值

时间:2018-07-29 20:04:37

标签: swift firebase-realtime-database

我的数据库如下:

{
  "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键在以下一级,但是我确实想查询所有类别的所有产品。

任何提示都值得赞赏!

0 个答案:

没有答案