我想根据{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是
"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"
},
答案 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(/* ... */)