【问题标题】:Android's Firestore to join 2 collections into a recycler viewAndroid Firestore 将 2 个集合加入到 recyclerview 中
【发布时间】:2019-02-23 14:03:08
【问题描述】:

我有一个包含 uId、姓名、照片的用户集合

我有一个包含 uId、userId、位置的访问集合

我有一个 recyclerview,我想在其中显示带有用户名和照片的位置

我可以使用引用字段类型吗?如果是这样,Firestore 将如何知道链接 visit.userId == users.uId ?

也许我首先需要查询所有访问,然后查询相关用户,但有两件事:

  1. 表示查询很多次。

  2. 我不明白如何将连接的集合收集到基于一个查询的适配器中?

请指教 谢谢

当前代码

visitsList = db.collection("visitsList");
Query query = visitsList.whereEqualTo("userId",prefs.getString("id","")).orderBy("visitDate", Query.Direction.ASCENDING);
FirestoreRecyclerOptions<AVisit> options = new FirestoreRecyclerOptions.Builder<AVisit>().setQuery(query, AVisit.class).build();
adapter = new VisitsListAdapter(options, VisitsListActivity.this);
RecyclerView rv = findViewById(R.id.rvVisitsList);
rv.setHasFixedSize(true);
rv.setLayoutManager(new LinearLayoutManager(this));
rv.setAdapter(adapter);

代码是来自集合的简单查询,不知道如何从该集合中的 userId 字段中获取名称和照片。

【问题讨论】:

  • 对于#2)如果您在编写代码时遇到问题,请分享minimal code that reproduces the problem(请阅读链接,因为它非常有用)。
  • 已更新。当前代码从集合中简单查询。
  • 啊,所以您正在使用 FirebaseUI,并且想知道如何在访问列表中显示来自用户配置文件的数据。对于未来的问题:那将是一个很好的标题。 :) 我没有为此准备任何代码,但我希望有两个主要选项:1)在populateView 或自定义parseSnapshot 实现中加载附加用户文档,2)在访问集合(这在 NoSQL 数据库中很正常)。另请参阅 Alex 的回答:stackoverflow.com/q/48756129

标签: android firebase google-cloud-firestore firebaseui


【解决方案1】:

我可以使用引用字段类型吗?

是的,您可以使用参考字段。

如果是这样,Firestore 将如何知道链接 visit.userId == users.uId ?

Firestore 结果始终来自单个集合(目前)。当您从访问集合中读取时,它不会自动加入用户集合中的文档。您必须自己执行此操作。

这确实意味着您将执行多次读取,但它通常并不像您想象的那么慢。见Google Firestore - how to get document by multiple ids in one round trip?


更新:要在访问列表中显示来自用户个人资料的数据,有两个主要选项:

  1. populateViewcustom parseSnapshot implementation 中加载其他用户文档。

  2. 在访问集合中复制相关的用户数据(这在 NoSQL 数据库中很正常)。也可以在这里查看 Alex 的回答:indexed query with FirestoreRecyclerAdapter

【讨论】:

  • 那么参考字段对我有什么帮助?我做了一个简单的 visitList.whereEqualTo("userId",prefs.getString("id","")) 并从访问集合中获取信息。如何将用户集合中的名称和照片“集成”到适配器中? (见更新的代码)。此外,名称是一个短字符串,图像要重得多,虽然在这里我可以同时查询一个用户,但集成(到适配器)问题仍然相关。
  • 查看 stackoverflow.com/questions/46568850/… 了解 Firestore 工程师对引用字段类型的解释。
  • 感谢您的链接。参考指向特定的 collection.document 所以他的解释有点混乱(那里的 cmets 也反映了这种混乱)。无论如何,显然这与我的问题无关。谢谢
  • 我会检查你建议的 populateview 选项。想一想,我不应该使用 onBindViewHolder 事件,其中所有数据实际上都“链接”到 viewholder 吗?
  • 我真的想知道parseSnapshot 对你来说是不是更好的选择,但两者都可以。如果您可能在不太可能被修改的时间范围内多次需要相同的用户文档,请绝对考虑缓存您查找的用户数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
  • 2021-12-02
  • 1970-01-01
  • 2018-12-09
  • 1970-01-01
  • 2022-01-01
  • 2021-01-25
相关资源
最近更新 更多