如何在Swift中自动生成的密钥上查询OrderedByValue?
我需要在自动生成密钥的节点上执行如何在Swift中自动生成的密钥上查询OrderedByValue?,swift,firebase,firebase-realtime-database,Swift,Firebase,Firebase Realtime Database,我需要在自动生成密钥的节点上执行queryOrderedByValue()。我的数据库结构如下图所示(/users pings/$uid/$uid/“auto id”) 为了实现这一点,我可以对下面的查询进行哪些更改 REF_USERS_PINGS.child(currentUid).child(forId).queryOrderedByValue().queryEqual(toValue: "true").observeSingleEvent(of: .value) { (snapshot)
queryOrderedByValue()
。我的数据库结构如下图所示(/users pings/$uid/$uid/“auto id”)
为了实现这一点,我可以对下面的查询进行哪些更改
REF_USERS_PINGS.child(currentUid).child(forId).queryOrderedByValue().queryEqual(toValue: "true").observeSingleEvent(of: .value) { (snapshot) in
if snapshot.exists(){
handler(true)
} else {
handler(false)
}
Firebase数据库查询在您运行它们的位置下的每个子节点上运行,因此在您的情况下,它们会在
用户ping下自动跳过第三级
您只需要指定要排序/筛选的属性,它在这里似乎是活动的。比如:
REF_USERS_PINGS.child(currentUid).child(forId).queryOrdered(byChild: "active").queryEqual(toValue: "true").observeSingleEvent(of: .value) { (snapshot) in
您需要使用queryOrderedByKey()
仅返回与该id相关的结果:
REF_USERS_PINGS.child(currentUid).child(forId).queryOrderedByKey().queryEqual(toValue: "-LH72MNIVX8o4KI3V9nL").observeSingleEvent(of: .value) { (snapshot) in
更多信息请点击此处:
啊哈!这是完全有道理的,而且成功了非常感谢您的帮助:)一个简单的问题:如果我想添加一个额外的订单/过滤器(例如:类型),我可以绑定一个额外的queryOrdered(byChild:“type”)。queryEqual(toValue:“complaude”)
到查询中吗?@Roggie否。查询只针对独生子女。Uou无法查询active=true且type=compaign的位置。但您可以存储复合值并在其上进行查询。例如,将另一个子节点添加到结构中:键入_active:“恭维_true”。注意:您的结构中的潜在问题;将bool值存储为字符串“true”,该字符串不等于true,因此,如果您通过该字符串进行查询时要小心,因为如果您正在查找一个bool值为true,您将找不到它。正如Jay所说,Firebase数据库查询只能对单个属性进行排序/筛选。在许多情况下,可以将要筛选的值组合到单个(合成)特性中。有关此方法和其他方法的示例,请参见我的回答:感谢您的建议,但这并不能解决问题,LH72MNIVX8o4KI3V9nL
是自动生成的,因此不会事先知道此值。