Я работаю с приложением чата.Мое облачное хранилище 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
Что я не знаю, и мне нужно знать: Как я могу получить все "сообщения", относящиеся к "одной комнате"
Что я хочу: Массив из 1000 сообщений, упорядоченный по отметке времени
например, room100 содержит массив messageIDs, до 1000 messagesID
| room100 | messageIDs : msg1001 , msg2088 , msg991090 ..... msg9999999
Должен ли я получить это так?
for a in messageIDs {
db.collection("Messages").whereField("roomID", isEqualTo: "msg1001")
.getDocuments() { (querySnapshot, err) in ......
}
}
Полагаю, нет, это создало бы несколько,1000 параллельных потоков.Я не могу предсказать, какой узел закончил бы первым, я получил бы окончательный результат в виде неупорядоченного массива сообщений
Или я должен получить его вот так?Вложенные запросы для полностью упорядоченных сообщений
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*
}
}
}
}
}
Как правильно выбрать, проверить и сравнить несколько идентификаторов группы ????????????????