【问题标题】:How to fetch all parent nodes with similar child nodes on Firebase database Android?如何在 Firebase 数据库 Android 上获取具有相似子节点的所有父节点?
【发布时间】:2019-09-28 04:02:54
【问题描述】:

我的数据库的屏幕截图

我想通过返回具有某些相似子节点的所有父节点的名称来查询我的数据库。

我已经在获取一位父母的姓名,但我想获取所有具有相似孩子值的父母的姓名。

假设,我想获取具有相似子节点值2000 并且评级为3-star 的酒店的名称。

final List<String> hotelNames = new ArrayList<String>();
final Query userQuery = FirebaseDatabase.getInstance().getReference().child("F-5").orderByChild("HotelTypeTwo");

userQuery.equalTo(varX).addListenerForSingleValueEvent(
        new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for (DataSnapshot foodSnapshot: dataSnapshot.getChildren()) {


                    hotelNames.add(foodSnapshot.getKey());


                    for (int i=0;i < hotelNames.size();i++)
                    {
                        Log.i("Value of element "+i,hotelNames.get(i));

                    }

                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        }
);

【问题讨论】:

  • 请添加您的数据库结构并指明您想要获取的确切数据。
  • 我已经分享了我的数据库的截图。我还编辑了所需数据的问题。
  • 所以你想得到所有HotelTypeTwo等于Desi的酒店,根据你的截图你期望的结果应该是:Islamabad Mariott HotelIslamabad Hotel,对吧?
  • 没错!但请添加另一个条件,其中“评分”也等于“3 星”。
  • 目前不能使用两个 where 条件。仅对一种情况有帮助的答案吗?

标签: java android firebase firebase-realtime-database


【解决方案1】:

所以要得到HotelTypeTwo等于Desi的所有酒店,并根据你的截图得到结果:Islamabad HotelIslamabad Mariott Hotel,请使用以下代码行:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference fRef = rootRef.child("F-5");
Query query = fRef.orderByChild("HotelTypeTwo").equalTo("Desi");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String hotelName = ds.getKey();
            Log.d(TAG, hotelName);
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
    }
};
query.addListenerForSingleValueEvent(valueEventListener);

您的 logcat 中的结果将是:

Islamabad Hotel
Islamabad Mariott Hotel

很遗憾,Firebase 中不允许查询多个属性。解决方法可以是我从以下帖子中得到的答案:

但是,在 Firestore 中 compound queries 是允许的:

citiesRef.whereEqualTo("state", "CO").whereEqualTo("name", "Denver");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-22
    • 2019-05-24
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多