2016-08-18 115 views
7
{ 
    "random_key 1" : { 
    "id": 0, 
    "text": "This is text" 
    }, 
    "random_key 2" : { 
    "id": 1, 
    "text": "This is text" 
    } 
} 

如果我以这种方式存储我的数据,并且我想获取id等于0的节点。我怎样才能做到这一点?Firebase查询数据

以上是issue的小孩,它是root的小孩。

+0

我的措辞我的问题有点不同,但我的帖子中的答案应该可以帮助你。 http://stackoverflow.com/questions/39023945/how-to-get-data-from-real-time-database-in-firebase/39024068#39024068 –

+0

如果你已经有一个现有的ID,为什么你不存储该ID下的数据?它将使查找更容易。 –

+0

@FrankvanPuffelen我已经存储在ID下的所有数据;我需要传递哪个值以通过该ID查询orderChild? – Shruti

回答

22

你的情况,你就必须建立一个这样的查询:

DatabaseReference reference = FirebaseDatabase.getInstance().getReference(); 

    Query query = reference.child("issue").orderByChild("id").equalTo(0); 
    query.addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      if (dataSnapshot.exists()) { 
       // dataSnapshot is the "issue" node with all children with id 0 
       for (DataSnapshot issue : dataSnapshot.getChildren()) { 
        // do something with the individual "issues" 
       } 
      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 
+0

可以请你帮我解决这个问题中的相同类型的问题: - http://stackoverflow.com/q/42502024/3946958 ...你可以告诉我你的答案是什么“问题”? ??? –

+0

它适用于我,,但你能告诉我们如何过滤数据与多个选项..喜欢用户从国家,州,市 –

+0

但是,如果我不想orderByChild命令?我只是想通过id匹配...对我来说,命令结果是额外的计算。 – dsharew

1

@ Linxy的答案是正确的,但既然你是从数据库中读取项目的列表,最好使用儿童事件侦听器而不是值事件侦听器。

DatabaseReference reference = FirebaseDatabase.getInstance().getReference(); 

Query query = reference.child("issue").orderByChild("id").equalTo(0); 
query.addChildEventListener(new ChildEventListener() { 
    @Override 
    public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
     //Do something with the individual node here`enter code here` 
    } 

    @Override 
    public void onChildChanged(DataSnapshot dataSnapshot, String s) { 

    } 

    @Override 
    public void onChildRemoved(DataSnapshot dataSnapshot) { 

    } 

    @Override 
    public void onChildMoved(DataSnapshot dataSnapshot, String s) { 

    } 

    @Override 
    public void onCancelled(FirebaseError firebaseError) { 

    } 


}); 
0

此代码对我的作品

mFirebaseDatabase.addListenerForSingleValueEvent(new ValueEventListener() { 
      @Override 
      public void onDataChange(final DataSnapshot dataSnapshot) { 
       for (DataSnapshot data : dataSnapshot.getChildren()) { 
       //If email exists then toast shows else store the data on new key 
        if (!data.getValue(User.class).getEmail().equals(email)) { 
         mFirebaseDatabase.child(mFirebaseDatabase.push().getKey()).setValue(new User(name, email)); 
        } else { 
         Toast.makeText(ChatListActivity.this, "E-mail already exists.", Toast.LENGTH_SHORT).show(); 
        } 
       } 
      } 

      @Override 
      public void onCancelled(final DatabaseError databaseError) { 
      } 
     }); 
0

对于火力地堡的一个易于使用的跨平台整合,你也可以看看V-Play Engine for mobile apps

FirebaseDatabase { 
    id: firebaseDb 

    Component.onCompleted: { 
    //use query parameter: 
    firebaseDb.getValue("public/bigqueryobject", { 
        orderByKey: true, //order by key before limiting 
        startAt: "c",  //return only keys alphabetically after "c" 
        endAt: "m",  //return only keys alphabetically before "m" 
        limitToFirst: 5, //return only first 5 sub-keys 
    }) 
    } 
}