当我获得子节点并访问其数据时,我还会查询哪些数据?

时间:2017-02-18 10:03:16

标签: firebase firebase-realtime-database

{message:{
  "id1":{
    "name":"name1"
},
  "id2":{
    "name":"name2"
},
  "id3":{
    "name":"name3"
}... and so on
}}

假设我有如上所述的firebase数据结构,现在我试图通过使用child(“id1”)... value()来获取第一个id的值(例如它的名称)。我是否可以在同一级别访问和查询“id2”或其他节点的数据?

排除在数据库中存储数据的成本,当“message”中的节点数量开始增长时,查询单个节点(获取其所有内部值)的成本会更高吗?

2 个答案:

答案 0 :(得分:0)

你必须这样做,你想要所有孩子在同一水平上的价值

firebase.child("message").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
    for (DataSnapshot innerDataSanpShot : dataSnapshot.getChildren()) {
      //DataSnapshot of inner Childerns mean id1, id2.... so on
      String name = innerDataSnapShot.child("name").getValue().toString();
     } 
}

@Override
public void onCancelled(FirebaseError firebaseError) {

}
});

另一种方式是你可以获得消息的全部数据,之后你可以通过这个获得每个子数据

   dataSnapshot.child("id1"). getValue();

答案 1 :(得分:0)

在不了解您的目标平台的情况下,我将假设它是一个基于Web的应用程序。为了在相关节点上执行数据查询,您可以执行以下操作:

var data = snapshot.val();
var userMessage = data.id1.message;

这个简单的示例将显示该特定位置的消息,您需要将其替换为' id1'格式正确。当您使用' id1'时,您不会从其他级别调用数据。用于精确定位要从中查询数据的节点的值。

就您的第二个问题而言,我不相信随着数据库的增长,通过查询单个节点会让您花费更多,只要您在该特定位置进行查询即可。当然,如果你添加一个循环,那么这将根据数据库的大小改变。