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

根据firestore在列表中的位置从firestore检索文档

况唯
2023-03-14

我在firestore数据库中有两个集合,第一个是所有文档的列表(BlockList),第二个是用户的。当用户书签在应用程序的RecycerView上发布时,将文档的id和时间戳发送到Users Collection下的子Collection(收藏夹)。

我从主集合(BlockList)中检索基于此ID的文档列表,但我希望根据每个用户的时间戳来排列它们,所以我尝试在将它们添加到Arraylist并记录列表之前按时间戳排序,我得到了正确的结果。但是RecycerView仍然按文档ID升序检索它们!

firebaseFirestore.collection("Users")
                .document(userId).collection("Favorites").orderBy("timestamp", Query.Direction.DESCENDING).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());

                    if (list.size() != 0){
                        blockReffav = firebaseFirestore.collection("BlockList")
                                .whereIn(FieldPath.documentId(), list);

                        blockReffav.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                            @Override
                            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                                if(task.isSuccessful()){
                                    onFirestoreTaskComplete.blockListDataAdded(task.getResult().toObjects(BlockListModel.class));
                                } else {
                                    onFirestoreTaskComplete.onError(task.getException());
                                }
                            }
                        });

                    }

                } else {
                    Log.d(TAG, "Error getting documents: ", task.getException());
                }
            }
        });

共有1个答案

唐炜
2023-03-14

给定当前检索文档的方式:

blockReffav = firebaseFirestore.collection("BlockList")
        .whereIn(FieldPath.documentId(), list);

在此查询中,无法指定列表中ID的顺序,因此您将按照文档ID的(默认)顺序重新获得它们。

我看到两个选择:

    null
 类似资料:
  • 我在片段中有一个回收器来显示firestore中集合中的文档,问题是,它只从文档中检索某些字段,看起来它忽略了模型类中的其他一些Setter字段,这是我得到的错误: W/Firestore:(0.6.6-dev)[zzko]:在com类中找不到sabado的setter/field。实例denilsondasilva。iasdmt。com。实例denilsondasilva。com。实例denil

  • 我如何删除一个特定的文档中的一个集合在fiRecovery使用反应? 我在这里和谷歌上看了看,但我没有发现任何内在相关的东西。 我只是设法从我的集合中删除索引[0]的文档。 这状态idDoc接收所有id文档。 如果我只是传递. doc(idDoc),我会得到以下错误: Firebase Error: Function Collection Reference.doc()要求它的第一个参数是非空字符

  • 我正在尝试从cloud Firestore的Flutter中的以下路径获取数据,我有以下结构 followers/{currentuser}/userfollower/{user_id} 用户/user_id/user_details 我正在尝试获取当前用户的所有关注者的详细信息。有人能帮忙吗? 我能得到第一部分是因为 我不知道如何循环通过所有id从用户集合中获取数据。我尝试了以下代码,但没有成功

  • 在第一个中,我有“alreadyloaded”用户ID, 在第二个中,我有所有的用户ID, 如何在FireStore中将第一个元素从第二个元素中排除?

  • 我正试图填充一个旋转器,但由于某些原因,当试图通过对象列表时,我得到了一个错误。请看一下:

  • 这只适用于第一个字母“j”,只要我加上“ja”(例如,我仍然显示所有的“jonathan”)