我有一个firestore,有两个根集合,properties
和users
。每个属性都有一个“huurders”列表,这些列表只是userId的,还有一个房间的子集合,每个房间都有一个包含UserId的“huurder”字段。
我试图得到一个所有房间的列表,其中“huurder”字段等于给定的id。现在我只是检查“huurders”是否包含我要查找的UserId,但我正在努力如何进入子集合房间。
这是我的职责
override fun getRentedRoomsByUserInFirestore(userId: String): Flow<RoomsResponse> = callbackFlow {
val snapshotListener = dbRef.collection("properties").whereArrayContains("huurders", userId).addSnapshotListener() { snapshot, e ->
val roomsResponse = if (snapshot != null) {
val rooms = snapshot.toObjects(Room::class.java)
Response.Success(rooms)
} else {
Response.Failure(e)
}
trySend(roomsResponse)
}
awaitClose { snapshotListener.remove()
}
}
这是不正确的,因为这只会返回一个属性列表,其中UserId在数组'huurders'中。我需要深入一层并获取房间。我的firestore将被链接为图像。
1条答案
按热度按时间f0brbegy1#
Firestore查询总是返回您查询的文档。它们不能返回嵌套集合中的文档或链接数据。
因此,如果你想从数据库中获取一个房间列表,你需要查询
rooms
子集合。要查询所有名为rooms
的集合,你可以使用集合组查询。因为你似乎在每个rooms
文档中都有一个huurder
字段,你应该能够通过以下方式获得正确的结果:这将为您提供
rooms
文档快照的列表。如果你想在这些结果中找到特定
DocumentSnapshot
的属性,你可以得到它的DocumentReference
,然后检查其父节点的父节点。