【问题标题】:Query from Firestore. Need to get list of objects从 Firestore 查询。需要获取对象列表
【发布时间】:2018-08-08 20:14:57
【问题描述】:

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

第 1 步:我们从一个集合 ONE 中获取 uidUser 列表并将其保存为列表 第 2 步:在集合 TWO 中,我只需要从第 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);
    });
}

【问题讨论】:

  • uidUsers 列表包含数据库中的所有 uid 还是仅包含特定的一个?如果它不包含所有 uid,那么将这些用户包含在该列表中的条件是什么?您说“文件在列表中的值相等”等于属性还是如何?请同时添加您的数据库结构并指明您想要获取的数据。

标签: android firebase google-cloud-firestore


【解决方案1】:

试试这个:-

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();
                }
            });
     }
}

【讨论】:

  • 这对@BorisRuzanov 有帮助吗?
  • 好的,非常感谢!
猜你喜欢
  • 2014-01-08
  • 2019-02-19
  • 1970-01-01
  • 2018-07-09
  • 2018-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多