如何在Firebase中过滤嵌套数据?

时间:2018-06-23 07:07:27

标签: android firebase firebase-realtime-database

我在firebase数据库中具有以下数据结构。

#initialise variable
nuberOfItem=0

while numberOfItem != 2:
    Item = input("Please select two items: ").split()
    numberOfItem = len(Item)

节点tripPackages -LCoHHZWL-NTLmJKDILV 50180557210016753 creationDate: farmerID: id: itemState: noOfItems: noOfSoldItems: totalAmount: tripId: tvoID: vegetableName: vid weight: 包含包含包裹的旅程,其中trippackages是旅程ID,而-LCoHHZWL-NTLmJKDILV是包裹ID。现在,我想用特定的50180557210016753(例如itemState)过滤所有旅行包。

我相信这段代码应该这样做:

IN_TRASIT

其中子firebaseDatabase.getReference().child("tripPackages").orderByChild("itemState").equalTo("IN_TRANSIT"); 的值是我的POJO中的一个枚举,但是我无法达到预期的结果。

POJO中child的嵌套位置级别或child的值类型是否与此有关?

当使用itemState的child的嵌套位置级别为2并且child的值为orderByChild时,我能够成功过滤相似数据结构中的数据。

2 个答案:

答案 0 :(得分:1)

  

POJO中child的嵌套位置级别或child的值类型与它有关系吗?

是的,它会影响。您有此数据库:

tripPackages  
   -LCoHHZWL-NTLmJKDILV
           50180557210016753
                   itemState: IN_TRANSIT

要能够根据itemState的值进行过滤,请尝试以下操作:

firebaseDatabase.getReference().child("tripPackages").child("-LCoHHZWL-NTLmJKDILV").orderByChild("itemState").equalTo("IN_TRANSIT");

您需要添加旅行ID,以便能够根据itemState

过滤数据

答案 1 :(得分:0)

Firebase数据库只能查询特定位置下一级的子级。因此,您可以查询单个行程的包裹(通过查询/tripPackages/-LCoHHZWL-NTLmJKDILV),但不能查询所有行程。

典型的解决方案是将软件包存储为列表,并为它们提供旅程ID属性,或者存储“按状态分类的软件包ID”的其他列表。

也可以在这里查看我的答案,它们都包含一个很好的数据结构示例来解决此问题: