【发布时间】:2021-10-21 18:57:10
【问题描述】:
我的 firebase 实时数据库中有这种类型的结构。我只想一次获取多个孩子的最后一项数据。
我遵循以下方法:
for (roomId in roomInformation.keys) {
// roomInformation will contain some of room ids
// to fetch from firebase db(not all roomIds from Messages)
val messageObserver = object : ValueEventListener {
...
}
FirebaseDatabase.getInstance().reference
.child("Messages")
.child(roomId)
.limitToLast(1)
.addListenerForSingleValueEvent(messageObserver)
}
我不想从Messages 集合中获取所有childs (roomIds)。这种从 firebase 获取数据的循环方法正在工作,但我想在单个回调中获取所需的记录 (没有 for 循环)。有没有可能做到这一点,或者还有其他更好的方法吗?
更新: 更多说明:
根据图片:有一个 Messages 集合,其中包括房间的 id,在房间内有数千条消息。我想获取所有房间的最后一条消息。因此,根据我应用的查询: Messages -> RoomId -> limitToLast(1) 所以它会给我特定房间的最后一条消息信息。 用户可能会加入数百个房间,最初当用户登录时,我想显示所有房间的最后一条消息。所以我使用 for 循环 来获取房间的消息,所以 Firebase 会一次给我一个房间的最后一条消息,但我希望所有房间一次都有最后一条消息。 这里是所有房间,Messages Collection 有 300 个房间,如果 UserA 加入了 50 个房间,那么我只想要 Messages 的最后一条消息strong>50 间客房
【问题讨论】:
-
您能否通过添加数据库截图以及不想使用循环的原因使其更清楚。此外,有关您正在使用的逻辑的更多信息可能会有所帮助。
-
嘿尼克。为了更好地理解。您想获取 Messages 节点中存在的所有对象吗?意思是在节点深处有两层?
-
@AlexMamo - 更新了我的答案
-
@KARUNESHPALEKAR - 添加了更多说明。不使用 for 循环的理由 -> 尽量减少 Firebase 调用并减少获取数据的时间
标签: android firebase kotlin firebase-realtime-database