Firebase Firestore,在另一个文档中获取参考文档
Posted
技术标签:
【中文标题】Firebase Firestore,在另一个文档中获取参考文档【英文标题】:Firebase Firestore, get the reference document inside another document 【发布时间】:2018-06-16 03:57:06 【问题描述】:我正在使用Firebase Cloud Firestore
,我希望在获取包含参考字段的文档时将参考字段作为文档接收,而不是作为对文档的参考...
我有一个用户集合和一个班级集合(在学校),每个班级都包含一个对用户(这个班级的学生)的引用列表。
当我使用document.get()
(通过其引用获取类)时,它返回一个包含DocumentReference
(用户)列表的对象,所以我需要再调用document.get()
大约20次才能让用户成为对象,而不是作为对它们的引用。
我希望能够调用document.get()
一次,它会将所有引用作为文档带给我,如下所示:
database 和 code
有没有优雅的方法来做到这一点?
【问题讨论】:
【参考方案1】:您无法指示 Firestore 客户端 SDK 在提取单个文档期间自动遵循文档引用。您必须请求每个单独的文件。换句话说,在 SQL 中没有您可能期望的“连接”操作。
另请参阅:What is firestore Reference data type good for?
【讨论】:
所以我需要单独请求每个参考?没有其他方法可以做到这一点吗? 这就是我的回答。 我可以使用一些查询功能来获取所有这些引用吗? 您可以单独获取它们。【参考方案2】:您可以从一个集合中获取多个文档。 Read get mutiple documents section from documentation
这是一个例子
db.collection("classes")
.document(idOfTheClassYouWantToGet)
.collection("users")
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>()
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task)
if (task.isSuccessful())
for (DocumentSnapshot document : task.getResult())
User user = document.toObject(Users.class);
);
【讨论】:
在 addOelsenCompleteListener 中你的意思是 addOnCompleteListener?它只会返回一个文档引用列表 是的,你可以通过调用task.getResult()来获取文档。我会编辑我的答案 我觉得你没听懂我的意思,这是我的database now,我想做this之类的事情(代码在kotlin中,但在java中是一样的) 好的,您正在为用户保留路径。这不是一个很好的方法。而是使用 add() 函数将用户写入数据库。它将为每个用户创建一个唯一的 ID。然后将该 id 存储在类集合中。因此,您可以使用它来获取某个类的用户。 @RoiAmiel 如果用户只有一个类,则将用户写入一个类中的子集合以上是关于Firebase Firestore,在另一个文档中获取参考文档的主要内容,如果未能解决你的问题,请参考以下文章
为啥 firebase_firestore 安全规则不适用于文档读取
Firebase 存储规则在 Firestore 文档上查找数据? [复制]
为啥 Firebase 数据库(Firestore)不添加文档
Firebase Firestore 中一个集合下的文档数量限制