首页 > 解决方案 > 从 Firebase 数据库中检索跨对象子对象

问题描述

我正在尝试从 where 获取weightquantityCat1哪里获取item_namedate并且在 Firebase Realtime DB 中branch是相同的。Cat2但我不知道如何检查条件。

JSON

"Cat1" : {
    "-LBBWypuYLVn-aDYWK-N" : {
      "branch" : "b1",
      "date" : "28/Apr/2018",
      "weight" : "46",
      "item_name" : "item1",
      "quantity" : "20"
    },
    "-LBBZKUlEJB-HdiKftoj" : {
      "branch" : "b2",
      "date" : "28/Apr/2018",
      "weight" : "112",
      "item_name" : "item2",
      "quantity" : "16"
    }
  },
"Cat2" : {
    "-LBBWQcC3acYk-OOiX3T" : {
      "branch" : "b1",
      "date" : "28/Apr/2018",
      "item_name" : "item1",
      "weight" : "2.7",
      "quantity" : "20"
    }
  }

到目前为止,我已经完成了以下工作:

mFishQuery = mFishRef.orderByChild("date").equalTo(mawStock.getDate());
//        mFishQuery = mFishRef.orderByKey();//.equalTo(mawStock.getDate());
//        Query fishWeight = mFishQuery.orderByChild("item_name").equalTo(mawStock.getItem_name()).getRef().orderByChild("quantity").equalTo(mawStock.getQuantity());
mFishQuery.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        mWeightF = (Double) dataSnapshot.child("fish_weight").getValue();
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});

mFishRef.child("date").equalTo(mawStock.getDate()).addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {

    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});

标签: javaandroidfirebasefirebase-realtime-database

解决方案


尝试以下操作:

DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("Cat2");
ref.orderByChild("item_name").equalTo("item1").addSingleValueEventListener(new ValueEventListener(){
  @Override
public void onDataChange(DataSnapshot dataSnapshot) {
 for(DataSnapshot datas: dataSnapshot.getChildren()){
    String date=datas.child("date").getValue().toString();

    DatabaseReference refer=FirebaseDatabase.getInstance().getReference().child("Cat1");
    refer.orderByChild("date").equalTo(date).addSingleValueEventListener(new ValueEventListener(){
         @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
       //retrieve data
      }
        @Override
    public void onCancelled(FirebaseError firebaseError) {

       }
      });
    }

  @Override
public void onCancelled(FirebaseError firebaseError) {

 }
});

查询时,只能使用一个孩子,所以一个orderByChild()orderByKey()

所以,在这里你有孩子的数据快照,Cat2然后你查询where item_name=item1date从数据库中检索。

然后添加一个嵌套监听器并进行查询where date= date_retrieved,并检索 Cat1 的数据。


推荐阅读