Swift读取Firebase实时数据库中的数据

时间:2017-01-18 19:13:53

标签: ios json swift firebase firebase-realtime-database

我已经在我的应用上设置了条形码扫描器,当应用扫描条形码时,我希望它能够搜索我的Firebase数据库以查看它是否已经过扫描过。

这是我的Firebase数据库JSON:

{
  "Ingredients" : {
    "Pork" : {
      "Products" : {
        "5741000124024" : {
          "Amount" : "1",
          "Unit" : "kg"
        }
      }
    },
    "apple" : {
      "Products" : {
        "5826374655024" : {
          "Amount" : "200",
          "Unit" : "g"
        }
      }
    }
  }
}

5741000124024是我试图通过此代码找到的产品的条形码:

FIRDatabase.database().reference().child("Ingredients").queryEqual(toValue: code).observeSingleEvent(of: .value, with: { (snap) in

    if !snap.exists() {
        print("Not scanned before")
    } else {
        print("Found It")
    }

})

它保持打印Not scanned before,即使条形码匹配,我在这里做错了什么?

2 个答案:

答案 0 :(得分:0)

更改您的结构以匹配您正在做的事情。

Ingredients
   -Uiiais9jjasd
     type: -Yss9ks9slkls
     barcode: "009012398129"
     amount: "1"
     unit: "kg"
   -Yijaijisdja
     type: -Y89u9s9asdsd
     barcode: "099009298493"
     amount: "1"
     unit: "kg"
   -Ua9j9jisjijd
     type: -Y89u9s9asdsd
     barcode: "000192983982"
     amount: "22"
     unit: "kg"

Types
   -Y89u9s9asdsd
     type: "Pork"
   -Yss9ks9slkls
     type: "Apple"

使用childByAutoId创建节点键名称(-Uiiais9jjasd,-Yijaijisdja),因为通常最佳做法是将您的键名与子数据解除关联。

答案 1 :(得分:0)

如果现有节点非常复杂,可以创建一个新的节点/分支,以便轻松获取数据,如下所示:

{
  "Barcode-Products" : {
    "5826374655024" : {
      "parent-item-id" : "apple"
    }
  },
  "Ingredients" : {
    "Pork" : {
      "Products" : {
        "5741000124024" : {
          "Amount" : "1",
          "Unit" : "kg"
        }
      }
    },
    "apple" : {
      "Products" : {
        "5826374655024" : {
          "Amount" : "200",
          "Unit" : "g"
        }
      }
    }
  }
}

以下是我使用在线编辑器制作的这个JSON的链接: http://www.jsoneditoronline.org/?id=ad884a350ce65b1580e090eb044002b1

这是您要在NoSQL / Firebase中使用的技术。在这种情况下,您可以轻松使用Firebase SDK的 queryEqual to 功能来获取特定的条形码ID 。然后查找 parent-item-id