让我向您展示Firestore文档结构。
如何比较stops
数组值?因为出发时每个条目的时间12:00 PM
会有所不同。
所以实际上我希望获得buss
的值,其中我的给定值与stops
数组的任何值匹配。
答案 0 :(得分:1)
根据@Frank van Puffelen的回答,因为Firestore不支持查询数组成员,所以应该考虑稍微改变一下数据库结构。因此,您应该使用maps
而不是使用数组。因此,在每个文档中,您需要添加一个map
,如下所示:
Firestore-root
|
--- buses (collection)
|
--- busId (document)
|
--- buss: "/buss/OdGpiY..."
|
--- stops (map)
|
--- IQdng...526MpZ: true
|
--- pnwJ...4P3ef: true
正如您所看到的,我在总线文档中添加了一个名为stops
的新映射,其中包含键,站点名称和布尔值true
。使用此数据库结构,您可以根据地图中存在的元素查询数据库,如下所示:
FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference busesRef = rootRef.collection("buses");
Query query = busesRef.whereEqualTo("stops.IQdng...526MpZ", true);
答案 1 :(得分:0)
来自Firestore documentation on arrays:
虽然Cloud Firestore可以存储数组,但它不支持查询数组成员或更新单个数组元素。
要允许查询包含特定停靠点的路径,您应该在文档中存储一个包含停靠点的附加字段:
stops
IQdng...526MpZ: true
现在您可以通过执行以下操作查询具有该停靠点的路线:
routesRef.whereEqualTo("stops.IQdng...526MpZ", true)
您也需要原始结构停止,因为这是了解停靠顺序和每次停止时间的唯一方法。