Firebase:在不知道父级的情况下查询内部子级

Posted

技术标签:

【中文标题】Firebase:在不知道父级的情况下查询内部子级【英文标题】:Firebase: Query inner child without knowing the parent 【发布时间】:2019-05-05 14:47:11 【问题描述】:

所以我想知道是否有一种方法可以基于内部子级进行查询,而无需知道 Firebase 数据库中的父级?这是确切的情况: 如图所示,我想查询 title = "bj" 的整个数据快照,因为我已经自动推送它们,所以我不知道密钥(或本例中的父项)。我很好奇 Fb Query 是否必须直接查看嵌套的子项? TIA

private void fetchPinnedLocationsForSearchbar(String key) 

        Query query = MyApplication.database.getReference("/pins/").child("title").orderByKey().equalTo(key);
        query.addListenerForSingleValueEvent(new ValueEventListener() 
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) 
                Log.e("-->X-DATA-FROM-QUERY", dataSnapshot.toString());
                for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) 
                    final BusinessModel pinItModel = new BusinessModel();
                    if (((Boolean) dataSnapshot1.child("ifBusiness").getValue())) 
                        if  
                            BusinessModel pinItModelTest = dataSnapshot1.getValue(BusinessModel.class);

                            Log.e("->PicCount", pinItModelTest.getPicCount() + "");
//
                            _data.add(pinItModelTest);


                

            

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) 

            
        );
    

【问题讨论】:

【参考方案1】:

所以我从 *** 上的另一篇帖子中找到了答案,该帖子建议解决方案应该是这样的:

FirebaseDatabase.getInstance().getReference("pins").orderByChild("title").equalTo("bj").addChildEventListener(new ChildEventListener() 
            @Override
            public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) 
                Log.e("-->X--ChildAddedQUERY", dataSnapshot.toString()+"---"+s);

            

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

            

            @Override
            public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) 

            

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

            

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) 

            
        );

【讨论】:

以上是关于Firebase:在不知道父级的情况下查询内部子级的主要内容,如果未能解决你的问题,请参考以下文章

使用MySQL SELECT查询获取父级的子级

查询未知父firebase的子快照

css父级没包住子级是怎么回事,我用firebug查看,确实在父级的div中,但是就是没有包括子级的内容

如果父级不调用 wait(),则同一父级的两个子级不使用管道进行通信

为啥我的 CSS 模块父级继承了子级的属性?

Flex wrap - 堆叠行而不拉伸? [复制]