Android Firestore将2个集合加入到recyclerview中

问题描述 投票:0回答:1

我有一个用户名,照片,用户名

我有一个使用uId,userId,location的访问集合

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

我可以使用参考字段类型吗?如果是这样,Firestore如何知道链接visits.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字段获取名称和照片。

android firebase google-cloud-firestore firebaseui
1个回答
2
投票

我可以使用参考字段类型吗?

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

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

Firestore结果总是来自一个集合(目前)。当您从访问集合中读取时,它不会自动从用户集合中加入文档。你必须自己做。

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


更新:要在访问列表中显示用户配置文件中的数据,有两个主要选项:

  1. populateViewcustom parseSnapshot implementation中加载其他用户文档。
  2. 复制访问集合中的相关用户数据(这在NoSQL数据库中非常正常)。另见亚历克斯的回答:indexed query with FirestoreRecyclerAdapter
© www.soinside.com 2019 - 2024. All rights reserved.