当前位置: 首页 > 知识库问答 >
问题:

使用文档ID从fiRecovery获取数据

皇甫建木
2023-03-14

我的firestore数据库中有两个集合,第一个是所有文档的列表(区块列表),第二个是用户的集合。当用户在应用程序上为帖子添加书签时,只将此帖子的id发送到子收藏(收藏夹)。

那么,如何根据第一个集合的ID显示该子集合的文档呢。

firebaseFirestore.collection("Users")
                .document(userId).collection("Favorites").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                if (task.isSuccessful()) {
                    List<String> list = new ArrayList<>();
                    for (QueryDocumentSnapshot document : task.getResult()) {
                        list.add(document.getId());
                    }
                    Log.d(TAG, list.toString());
                } else {
                    Log.d(TAG, "Error getting documents: ", task.getException());
                }
            }
        });

我使用此代码访问子集合ID列表,但我想知道如何使用它从主集合(区块列表)中获取适合此ID的文档。

共有2个答案

蓝逸仙
2023-03-14
    userRef.document(reference)
                    .collection(favCollect)
                    .get()
                    .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                        @Override
                        public void onComplete(@NonNull Task<QuerySnapshot> task) {
                            if (task.isSuccessful()) {
                                task.getResult()
                                        .getQuery()
                                        .addSnapshotListener((queryDocumentSnapshots, e) -> {
List<DocumentChange> documentChanges = queryDocumentSnapshots.getDocumentChanges();
                                    for (int i = 0; i < documentChanges.size(); i++) {

}

}

这样你就可以找到你要找的id

桑成荫
2023-03-14

循环之后,你已经有了一个ID列表,只需循环它们并在blockedList中找到它们:

....
....
for (QueryDocumentSnapshot document : task.getResult()) {
list.add(document.getId());
}

//here loop through the list

for(int i = 0 ; i<list.size() ; i++){

//now refer to the id in the blocked list
firebaseFirestore.collection("BlockList").document(list.get(i)).get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<DocumentSnapshot> task) {

    .........

    });



}

......
......
 类似资料:
  • 在Firestore中,如何获取集合中的文档总数? 例如,如果我有 我想查询我有多少人,得到2。 我可以对 /people进行查询,然后获取返回结果的长度,但这似乎是一种浪费,特别是因为我将在更大的数据集上进行此操作。

  • 对于我的项目,我想从一个子集合中的所有文档中获取数据。并且这个子集合有多个文档。 为了澄清一下,这就是我的火力恢复的结构:我有一个事件集合,其中包含多个文档,doc.id是事件名称本身。每个事件文档都有几个字段和一个与会者子集合。在与会者子集合中,每个文档都包含有关与会者的详细信息。 我想浏览events集合中的所有文档,并从所有文档中获取关于与会者的数据。 我想在组件第一次渲染时显示这些数据。所

  • 我刚开始制作一个使用云fiRecovery作为数据库的简单网站。当用户添加新数据时,我让fiRecovery自动生成文档ID(作为图像)。现在我想得到那个文档ID,但我对此一无所知。这是我的代码: 当我使用控制台时。log(documentId)在该promise之外,它返回“未定义”。请帮忙,谢谢!

  • 如何像TikTok一样获得随机文档?也就是说,比方说,我按下按钮,数据库中的一些随机记录在我看来。

  • 我有一个ArrayList,其中包含我想要获取的所有ID。是否有一种方法可以使用列表获取多个文档及其字段值。此外,如果我必须手动创建for循环来获取每个文档,我应该如何做? Firestore数据结构: 该列表包含:user1、user2、user3等等。。。 编辑1:我试图使用for循环获取它,但它在 编辑2: 循环的另一个逻辑也给出了相同的错误。当我登录时,我可以看到

  • 在我们仔细处理之后。我仍然无法获取自动生成的文档ID。没有“then”选项。我的代码: 创建后如何获取ID?