代码之家  ›  专栏  ›  技术社区  ›  Bo Z

来自Firestore的查询。需要获取对象列表

  •  0
  • Bo Z  · 技术社区  · 7 年前

    需要根据参数列表获取对象列表,而不仅仅是一个参数。

    步骤1:我们从一个集合1中获取uidUsers列表并将其保存为列表 步骤2:在集合2中,我只需要从步骤1的列表中获取文档值相等的那些文档(具有值的对象)。

    我想通过比较列表中的文档名和uid来过滤文档。但在API中没有找到任何解决方案。 现在也许可以将uidUser保存在文档字段中,这样我就可以通过比较文档字段的键值和列表中的值来查找。但我不知道怎么做。

    我有一个小代码

      public void getNeededUsers(List<String> uidList, UsersListCallback usersListCallback){
        Query query = db.collection(Consts.COLLECTION_USERS);
        for (String uid: uidList) {
            query.whereEqualTo("uid", uid);
        }
        query.get().addOnCompleteListener(task -> {
            List<User> userList = new ArrayList<>();
            for(DocumentSnapshot snapshot: task.getResult().getDocuments()){
                userList.add(snapshot.toObject(User.class));
            }
            usersListCallback.getUsers(userList);
        });
    }
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Raj    7 年前

    试试这个:-

    public void getNeededUsers(List<String> uidList, UsersListCallback usersListCallback){
    List<User> userList = new ArrayList<>();
    
    for (int i = 0; i < uidList.size(); i++){
        db.collection("Collection A").whereEqualTo("uid", uidList.get(i))
            .addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
                @Override
                public void onSuccess(DocumentReference documentReference) {
                    userList.add(documentReference.getId());
                    }
                })
                .addOnFailureListener(this, new OnFailureListener() {
                    @Override
                    public void onFailure(Exception e) {
                        Toast.makeText(ActivityName.this, "Error In Fetching Uid's" + e.getMessage(), Toast.LENGTH_SHORT).show();
                        }
                });
            }
    

    现在userList将包含所有匹配的uid。现在根据这些uid从集合2中检索数据。

    通过调用fetchData(userList);

    public void fetchData(List<String> documentList)
    {
    for (int j = 0; j < documentList.size(); j++){
        db.collection("Collection B").whereEqualTo("uid", documentList.get(i))
        .get()
        .addOnCompleteListener(this, new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(Task<QuerySnapshot> task) {
                if (task.isSuccessful())
                {
                    for (QueryDocumentSnapshot documentSnapshot : task.getResult())
                    {
                        //Here you can fetch data or convert it to object
                    }
                }
            }
        })
                .addOnFailureListener(this, new OnFailureListener() {
                    @Override
                    public void onFailure(Exception e) {
                        Toast.makeText(ActivityName.this, "Error: " + e.getMessage(), Toast.LENGTH_SHORT).show();
                        pd.dismiss();
                    }
                });
         }
    }