У меня есть следующий поток, который принимает поток группы и возвращает поток ее членов. Я использую карту переключателей, чтобы получить участников из снимка группы.
Но у меня такая проблема. Я использую запрос where с фильтром whereIn
. Но проблема в том, что whereIn
может принимать только список, который имеет 10 или меньше записей в соответствии с документацией firestore.
Ограничения Обратите внимание на следующие ограничения для in и array-contains-any:
in и array-contains-any поддерживают до 10 сравнительных значений.
https://firebase.google.com/docs/firestore/query-data/queries#limitations
Так что у меня есть некоторые трудности с этим в этом сенарио.
Stream<List<UserModel>> groupMembersStream(Stream<GroupModel> groupStream) {
return groupStream.switchMap(
(value) => _fireStore
.collection(APIRoutes.users)
.where(FieldPath.documentId, whereIn: value.members.keys.toList(growable: false))
.snapshots()
.map((snapshot) =>
snapshot.documents.map((document) => UserModel.fromFirestore(document)).toList(growable: false)),
);
}
Потому что мне нужен идентификатор члена группы для начала, поэтому мне нужен switchMap. Поэтому я не могу просто разделить список участников группы, а затем выполнить отдельный запрос для каждого фрагмента из 10 идентификаторов.
Итак, как мне с этим справиться?