[英]How to create one stream listening to multiple Firestore documents created from list of documents references in Flutter
我试图创建一个 stream,它使用从 Firebase Firestore 存储和获取的多个文档引用。
假设我有两个名为users
和documents
的集合。 创建用户时,他会在users
集合中获取具有其id
的文档,该文档具有名为documentsHasAccessTo
的字段,该字段是对documents
集合中文档的引用列表。 重要的是,这些文档可以位于documents
集合内的不同子 collections 中,因此我不想查询整个documents
并对其进行过滤,以保存 Firestore 传输并使其更快我已经知道存储在documentsHasAccessTo
中的documents
的路径。
因此,例如,我可以让用户在users/<user uid>
documentsHasAccessTo
中包含数据,其中包含存储 3 个不同文档引用的 filesHasAccessTo 字段。
我想实现这样的目标(未经测试):
final userId = 'blablakfn1n21n4109';
final usersDocumentRef = FirebaseFirestore.instance.doc('users/$userId');
usersDocumentRef.snapshots().listen((snapshot) {
final references = snapshot.data()['documentsHasAccessTo'] as List<DocumentReference>;
final documentsStream = // create single query stream using all references from list
});
请记住,如果这个 stream 会更新查询,如果documentsHasAccessTo
HasAccessTo 像上面的示例一样发生变化,那也很棒,因此我在usersDocumentReferences
上使用了snapshots()
而不是单个get()
获取。
我越想这个我开始相信这很简单是不可能的,或者有一个更简单和干净的解决方案。 我对任何事情都持开放态度。
您可以使用rxdart
的switchMap
和MergeStream
:
usersDocumentRef.snapshots().switchMap((snapshot) {
final references = snapshot.data()['documentsHasAccessTo'] as List<DocumentReference>;
return MergeStream(references.map(ref) => /* do something that creates a stream */));
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.