【问题标题】:firebase retrieve data using orderByChild() and equalTo()firebase 使用 orderByChild() 和 equalTo() 检索数据
【发布时间】:2018-03-27 05:13:00
【问题描述】:
firebase.database().ref('requests')
.orderByChild('sender')
.equalTo("viePatHR0qRaBPGvsb992LEM55F3")
.on("child_added", (snapshot) => {
console.log(snapshot.key);})
所以我试图在图片中的“requests”下找到关键节点:(例如:Mt8ElzJCDfSwDgdjjLuu38KUSw83 和e3iFEuoTtJXAkLgOyxoT0LIeQAg1)
我使用了这段代码,但我什么也没得到。什么问题?我应该使用什么?
【问题讨论】:
标签:
javascript
firebase
firebase-realtime-database
【解决方案1】:
.orderByChild 查询仅适用于子级别。 (没有孙子)在您的情况下,这将是 Firebase 按键的级别,例如-KwqBYHP...
因此,如果您执行.orderByChild('sender'),它将不起作用,因为在此级别上没有名为sender 的属性。
因此,根据您的情况,您有两种选择。如果 viePatHR0qRaBPGvsb992LEM55F3 是唯一 id,您可以通过使用 set 而不是 push 将您的数据保存到数据库中来摆脱 firebase 按键。
如果viePatHR0qRaBPGvsb992LEM55F3 不是唯一ID,那么您需要修改您的引用。
修改后的引用如下所示firebase.database().ref('requests/viePatHR0qRaBPGvsb992LEM55F3').orderByChild('sender')
如果这不是您所期望的,您唯一的选择就是重建您的数据结构。通过创建例如一个名为的属性来摆脱深层嵌套:
id: "viePatHR0qRaBPGvsb992LEM55F3"
直接在您的对象上(与sender 属性所在的级别相同)。