我已经在我的应用上设置了条形码扫描器,当应用扫描条形码时,我希望它能够搜索我的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
,即使条形码匹配,我在这里做错了什么?
答案 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 。