我在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
时,我能够成功过滤相似数据结构中的数据。
答案 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”的其他列表。
也可以在这里查看我的答案,它们都包含一个很好的数据结构示例来解决此问题: