这个问题在这里已经有答案了:
firebase查询双嵌套(3个答案)
上个月关门了。
我的数据库中有“orderstatus”节点类型integer,我需要通过它的值(0、1、2等)来查询它。如果我使用orderbychild(“orderstatus”),它可以正常工作,但我不想下载所有数据并对其进行排序,我只想下载具有特定“orderstatus”的数据。这就是我的问题所在,当我把equalto(statusinteger)放入数据库时,我没有从数据库中得到任何数据。我做错了什么,我是不是用了equalto错了什么?
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("Orders");
Query orderRef = databaseReference
.child(restaurantId)
.orderByChild("orderStatus")
.equalTo(0);
orderRef.addListenerForSingleValueEvent...
2条答案
按热度按时间r1zk6ea11#
为了能够按特定属性查询数据库,需要添加该特定层次结构中存在的所有子名称。在查询中,您缺少一个孩子。在“restaurantid”节点和实际
Order
对象,它持有“orderstatus”属性,还有一个节点,即“lpg…”。。。cq2”,我假设是登录用户的uid。要使其正常工作,请使用以下代码行:logcat中的结果将是:
编辑:
根据您的评论,您要查找的内容实际上不可能与您的实际数据库结构相匹配。除此之外,在客户机上进行过滤在这种情况下绝对不是一个选项。
但是,我能想到的最好办法是创建另一个节点来存储所有用户的所有订单。这样,您就可以使用“.orderbychild”(“orderstatus”).equalto(0)”进行查询,得到所需的结果。这种做法被称为反规范化,是一种常见的做法,当谈到火基。为了更好的理解,我建议你看这个视频,非规范化是正常的firebase实时数据库。
mnemlml82#
如果你从
.equalTo(... )
那么.orderBy(...)
?