检索文档列表,仅限于数组中的ID-进行后续操作

时间:2020-10-14 04:30:38

标签: firebase flutter firebase-realtime-database nosql

这是the question asked here的后续问题。长话短说,我试图将Flutter Firebase查询仅限制为列表中包含的值。

这是工作代码,最后还有一个附加问题。使用“份额”集合并将ID字段添加到“项目”集合中,如下所示:

Shares db

Projects db

我现在能够使用一个Stream来(按用户)检索我的股票,然后将该列表用作第二个Stream中的查询,如下所示:

@override
Stream<Map<String, dynamic>> getUserSharesStream({@required String uid}) {
  return _firestore.collection('shares').doc(uid).snapshots().map((doc) => doc.data());
}

@override
Stream<List<Map>> getListOfProjectsForUser({@required String uid, @required List<String> shares}) {
  var ref = _firestore.collection('projects');
  return ref
      .where('id', whereIn: shares)
      .snapshots()
      .map((QuerySnapshot snapshot) => snapshot.docs.map((DocumentSnapshot doc) => doc.data()).toList());
}

在应用程序中,我得到与用户共享的项目列表,如下所示:

stream: userSharesQuery,
builder: (BuildContext context, AsyncSnapshot snapshot) {
  if (snapshot.hasData) {
    Map<String, dynamic> result = snapshot.data;
    projectsList = result.keys.toList();

通过将该列表输入我的projectsListStream.builder中,我得到了与用户共享的项目的列表,这就是原始问题的答案。

我剩下的问题是:很明显,我在查询限制列表中限制了10个项目。那么对于共享项目数更大大于10的实例, YOU 架构师将如何?

我是否应该放弃尝试限制查询,而只是每次都解析整个项目列表,寻找与用户共享列表匹配的projectIds?还是有一种方法可以多次调用流,每次调用10条清单?还是您会建议一个完全不同的方案来完成任务?

1 个答案:

答案 0 :(得分:1)

我知道我来晚了,但是我试图提出类似的建议,所以如果有人想使用快照而不是获得实时视频流,这会有所帮助

使用rx package name_counts,您可以将多个流拆分成长度小于或等于10的数组,然后将其合并

name_counts['Yoga1']