嵌套列表中的Firebase实时数据库筛选器数据

时间:2018-03-27 07:52:07

标签: android firebase firebase-realtime-database

我想根据{em> 31

extra_Cat值从数据库中检索过滤数据

我能够轻松检索完整数据,但无法将过滤器放入其中

注意:我已经检查了几乎所有的解决方案,如果重复请回复然后标记重复

我的代码是

 DBConnection dbConnection=new DBConnection();
        postRef=dbConnection.database.getReference("Data");
        postRef.child("extra_Cat").orderByKey().equalTo("*31*").limitToLast(500).addValueEventListener(new ValueEventListener() {

            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                long as= dataSnapshot.getChildrenCount();
                Log.d("Data", String.valueOf(as));
            }
            @Override
            public void onCancelled(DatabaseError error) {
                // Failed to read value
            }
        });

和JSON是

enter image description here

    "32161" : {
  "author_name" : "Talented+Desk",
  "cat_ID" : "%2A7%2A",
  "cat_name" : "%E0%A4%96%E0%A5%87%E0%A4%B2",
  "content" : "A4%B5A4%A8%E0%A4%BF%E0%A4%AF%E0%A4%AE+%E0%A4%B9%E0%A5%88%E0%A4%82%7C%E2%80%9D%3C%2Fp%3E%0A",
    "extraCat" : [ "*31*", "*14*" ],
  "fea_image" : "https%3A%2F%2Fwww.talentedindia.co.in%2Fwp-content%2Fuploads%2F2018%2F03%2Faajeevan-pratibandh-Steve-Smith.jpg",
  "post_comment" : "0%A4%BF%E0%A4%AF%E0%A5%8B%E",
  "post_date" : "2018-03-26",
  "post_id" : "32161",
  "post_slug_name" : "kangaroos-protest-against-less-punishment",
  "post_status" : "publish",
  "post_time" : "10%3A45%3A40",
  "post_video" : "",
  "slider_image1" : "",
  "slider_image2" : "",
  "slider_image3" : "",
  "slider_image4" : "",
  "title" : "%E0%A4%94%B8%E0%A4%9C%E0%A4%BE+%E0%A4%AA%E0%A4%B0+%E0%A4%B5%E0%A4%BF%E0%A4%B0%E0%A5%8B%E0%A4%A7"
},

2 个答案:

答案 0 :(得分:2)

首先,您使用错误的参考路径。您当前使用的是 Data/extra_cat 。正如我在您的Firebase结构中看到的那样,它应该是 Data/32343/extraCat 您无法使用.child("extra_Cat").orderByKey().equalTo("*31*"),因为 *31* 不属于 extra_Cat 键值。该值在列表中。

答案 1 :(得分:1)

您无法基于数组中存在的值创建查询。正如我在您的数据库中看到的那样,extraCat是一个包含2个值*31**14*的数组。

为了解决这个问题,您需要稍微更改数据库结构。因此,您的extraCat节点应如下所示:

extraCat
  |
  --- "*31*": true
  |
  --- "*14*": true

如您所见,extraCat节点现在是Map。相应的查询应如下所示:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
Query query = rootRef.child("Data")
    .orderByChild("extra_Cat/*31*")
    .equalsTo(true)
    .limitToLast(500)
    .addValueEventListener(/* ... */)