嗨,我有一个Firebase数据库结构,如图所示。
我想查询包含"statuskirim"= "Not Shipped"
的数据,该数据位于Order子项的深处。
我有第一个孩子(订单),第二个孩子(081000、0567743251。e.t.c),第三个孩子-每个第二个孩子(分别是1、2、3等)。
在每个第三个孩子中,有一个我要查询的名为"statuskirim"
的节点。
以前我没有使用第三个孩子(即1,2,3 e.t.c)。
我的这段代码查询成功:
ordersRef=FirebaseDatabase.getInstance().getReference().child("Order")
FirebaseRecyclerOptions<AdminOrders> options = new FirebaseRecyclerOptions.Builder<AdminOrders>() .setQuery(ordersRef.orderByChild("statuskirim").equalTo("Shipped"),AdminOrders.class)
.build();
但是我不知道添加第三个孩子后如何查询。
我想我应该在"ordersRef"
中添加第二个孩子,即
ordersRef=FirebaseDatabase.getInstance().getReference().child("Order").child("0810000")
它适用于一个第二个孩子(“ 0810000”,但是我如何添加所有第二个孩子(如果第二个孩子很多)
Peter Hadad Sugegsted编辑的代码:
DatabaseReference reference =
FirebaseDatabase.getInstance().getReference("Order");
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot datas : dataSnapshot.getChildren()){
String key = datas.getKey();
FirebaseRecyclerOptions<AdminOrders> options = new
FirebaseRecyclerOptions.Builder<AdminOrders>() .setQuery(ordersRef.orderbyChild(key).orderByChild("statuskirim").equalTo("Shipped"),AdminOrders.class)
.build();
...(在结束标签显示数据e,t.c上),但是结果仅显示第二个孩子的最后一个数据,而不是所有数据
答案 0 :(得分:0)
尝试以下操作:
render()
这里,在这种情况下,DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Order");
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot datas : dataSnapshot.getChildren()){
String key = datas.getKey();
reference.child(key).orderByChild("statuskirim").equalTo("Shipped").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()){
String statuskirim = ds.child("statuskirim").getValue().toString();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
});
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
将检索第二个孩子,然后您可以在getKey()
内使用它,然后便可以使用child()
查询。
尽管,优化数据库可能更好,而不添加更多嵌套子级。