2017-10-16 43 views
1

我的模式设置如下。搜索具有唯一密钥阵列的Firebase查询

enter image description here

现在我要发送的字符串chinohills7leavescafe101191514.19284并要检查是否有在Chino Hills或没有任何字符串。 我很困惑,使任何搜索查询,因为我没有存储固定的上述字符串childKey 我知道架构应该是这样的,但我不能改变架构。

leaves-cafe 
    codes 
     Chino Hills 
      -Kw0ZtwrPjyNh1_HJrkf 
       codeValue: "chinohills7leavescafe101191514.19284" 
+0

请显示您尝试过的一些代码,并显示'Chino Hills'的扩展结构的任何子键? – 3stud1ant3

回答

2

您正在寻找queryOrderedByValue。它与queryOrderedByChild的工作方式相同,并允许您使用queryEqualToValue来实现您所需的结果,因为您无法更改当前的架构。

下面是一个例子

// warning: untested code - just illustrating queryOrderedByValue 

let ref = Database.database().reference().child("leaves-cafe").child("codes").child("Chino Hills") 
let queryRef = ref.queryOrderedByValue().queryEqual(toValue: "chinohills7leavescafe101191514.19284") 

queryRef.observeSingleEvent(of: .value, with: { (snapshot) in 
    if snapshot.exists() { 
     print("value does exists") 
    } else { 
     print("value doesn't exist") 
    } 
}) 

你的替代选择是遍历所有节点并检查是否值手动存在如3stud1ant3建议。但是请注意,这种方法既费钱又有安全风险。你会下载大量的数据,一般你不应该在设备上加载不需要的数据(特别是如果他们是敏感信息,不知道是否是你的情况);这相当于从数据库中下载所有密码以检查输入的密码是否与给定用户匹配。