从内部子查询数据(深度查询)

时间:2019-03-27 07:12:08

标签: android firebase firebase-realtime-database

enter image description here

嗨,我有一个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上),但是结果仅显示第二个孩子的最后一个数据,而不是所有数据

1 个答案:

答案 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()查询。

尽管,优化数据库可能更好,而不添加更多嵌套子级。