【问题标题】:How to create one stream listening to multiple Firestore documents created from list of documents references in Flutter如何创建一个流来监听从 Flutter 中的文档引用列表创建的多个 Firestore 文档
【发布时间】:2023-04-11 00:00:01
【问题描述】:

我正在尝试创建一个流,即使用从 Firebase Firestore 存储和获取的多个文档引用。

假设我有两个名为 usersdocuments 的集合。创建用户时,他在users 集合中获取带有id 的文档,其中字段名为documentsHasAccessTo,这是对documents 集合中文档的引用列表。重要的是,这些文档可以位于 documents 集合内的不同子集合中,因此我不想查询整个 documents 并对其进行过滤,以节省 Firestore 传输并使其更快我已经知道到 @987654329 的路径@ 存储在documentsHasAccessTo 字段中。

例如,我可以让用户在 users/<user uid> 文档中使用数据,其中 documentsHasAccessTo 字段存储 3 个不同的文档引用。

我想实现这样的目标(未经测试):

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
});

请记住,如果documentsHasAccessTo 像上面的示例一样发生变化,如果此流将更新查询,那也很棒,因此我在usersDocumentReferences 上使用snapshots() 而不是单个get() fetch。

我想得越多,我开始相信这是不可能的,或者有一个更简单、更干净的解决方案。我对任何事情都持开放态度。

【问题讨论】:

    标签: firebase flutter dart google-cloud-firestore


    【解决方案1】:

    你可以使用rxdartswitchMapMergeStream

    usersDocumentRef.snapshots().switchMap((snapshot) {
      final references = snapshot.data()['documentsHasAccessTo'] as List<DocumentReference>;
      return MergeStream(references.map(ref) => /* do something that creates a stream */));
    });
    

    【讨论】:

    • 是时候学习 RxDart 了
    • 你不会后悔的:)
    猜你喜欢
    • 2019-05-27
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2018-07-08
    • 1970-01-01
    • 2020-03-15
    • 1970-01-01
    • 2018-03-19
    相关资源
    最近更新 更多