firebase使用orderByChild()和equalTo()检索数据

时间:2017-10-17 21:51:24

标签: javascript firebase firebase-realtime-database

Example my db firebase

firebase.database().ref('requests')
  .orderByChild('sender')
  .equalTo("viePatHR0qRaBPGvsb992LEM55F3")
  .on("child_added", (snapshot) => {
    console.log(snapshot.key);})

所以我试图找到图片中“请求”下的关键节点:(示例:Mt8ElzJCDfSwDgdjjLuu38KUSw83e3iFEuoTtJXAkLgOyxoT0LIeQAg1) 我用过这段代码,但我什么都没回来。哪里错了?我该怎么用?

1 个答案:

答案 0 :(得分:2)

.orderByChild查询仅适用于子级别。 (没有孙子)在你的情况下,这将是firebase按键的级别,例如-KwqBYHP...

因此,如果你执行.orderByChild('sender')它将无效,因为此级别上没有名为sender的属性。

因此,根据您的情况,您有两种选择。如果viePatHR0qRaBPGvsb992LEM55F3是唯一ID,则可以使用set代替push将数据保存到数据库中,从而摆脱firebase pushkeys。

如果viePatHR0qRaBPGvsb992LEM55F3不是唯一ID,则需要修改您的参考。

修改后的引用看起来像firebase.database().ref('requests/viePatHR0qRaBPGvsb992LEM55F3').orderByChild('sender')

如果这不是您所期望的,那么您唯一的选择就是重建数据结构。通过创建一个名为:

的属性来摆脱深度嵌套

id: "viePatHR0qRaBPGvsb992LEM55F3"

直接在您的对象上(在sender属性所在的同一级别上)。