0

我正在使用聊天应用程序。我的 Firebase 云存储看起来像这样

消息 = 保存来自每个用户的完整消息,从服务发布开始的每条消息都聚集在这里。它可能包含 1,000,000,000,000 条 ~ 消息

Messages | msg1                    | msgID = msg1
         | msg2                    | roomID = room03
         | msg3                    | content = "HELLO"
         | ....... msg100,000,000  |

Rooms    | room01  |  roomID : room01
         | room02  |  memberIDs : user1 , user2 , user3
         | room03  |  messageIDs : msg1001 , msg2088 , msg991090

我所知道的:我可以轻松地从这数十亿条消息中获取 1 条消息

db.collection("Messages").whereField("roomID", isEqualTo: "msg1001")
    .getDocuments() { (querySnapshot, err) in

我不知道,我需要知道:如何获取与“一个房间”相关的所有“消息”

我想要的:一个包含 1,000 条消息的数组,按时间戳排序

例如,room100 包含一个 messageID 数组,最多 1,000 个 messagesID

| room100  |  messageIDs : msg1001 , msg2088 , msg991090 ..... msg9999999

我应该这样取吗?

for a in messageIDs {
      db.collection("Messages").whereField("roomID", isEqualTo: "msg1001")
     .getDocuments() { (querySnapshot, err) in ......
   }
 }

我想不会,这会创建多个 1,000 个并行线程。我无法预测哪个节点会先完成,我会得到最终结果为无序的消息数组

或者我应该这样取吗?嵌套请求,用于完全排序的消息

db.collection("Messages").whereField("roomID", isEqualTo: "msg1001")
         .getDocuments() { (querySnapshot, err) in 

           db.collection("Messages").whereField("roomID", isEqualTo: "msg1002")
     .getDocuments() { (querySnapshot, err) in 

       db.collection("Messages").whereField("roomID", isEqualTo: "msg1003")
     .getDocuments() { (querySnapshot, err) in 

       *....... and so on , 1000 nested requests*
     }
   }
  }
 }
}

获取、验证和比较多个 groupID 的正确方法是什么????????????????

4

0 回答 0