【问题标题】:Firebase Firestore, get the reference document inside another documentFirebase Firestore,在另一个文档中获取参考文档
【发布时间】:2018-06-16 03:57:06
【问题描述】:

我正在使用Firebase Cloud Firestore,我希望在获取包含参考字段的文档时将参考字段作为文档接收,而不是作为对文档的参考...

我有一个用户集合和一个班级集合(在学校),每个班级都包含一个对用户(这个班级的学生)的引用列表。 当我使用document.get()(通过其引用获取类)时,它返回一个包含DocumentReference(用户)列表的对象,所以我需要再调用document.get()大约20次才能让用户成为对象,而不是作为对它们的引用。

我希望能够调用document.get() 一次,它会将所有引用作为文档带给我,如下所示: databasecode

有没有优雅的方法来做到这一点?

【问题讨论】:

    标签: android firebase google-cloud-firestore


    【解决方案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 如果用户只有一个类,则将用户写入一个类中的子集合
    猜你喜欢
    • 1970-01-01
    • 2018-08-02
    • 1970-01-01
    • 2021-03-25
    • 2022-01-05
    • 2018-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多