如何使用组集合中的ID数组查询用户集合

时间:2019-05-26 01:25:11

标签: android google-cloud-firestore

我有一个用于存储用户组的集合。每个组都有一个组名,组限制和一组用户ID。

我想知道如何最好的方式来检索一个组的详细信息,然后再检索用户的详细信息,例如姓名,照片等。

现在,我正在对数据库进行两个查询。首先检索组数据(名称等),然后获取用户列表,该用户列表中包含用户详细信息组ID的信息:

“ syncDesp = a4sQ27xb1wuD2rhONU2K”

我害怕多次调用数据库。

// Get Group details
Preferencias prefs = new Preferencias(view.getContext());
listenGroups = pFirestore.collection("syncDesps").document(prefs.getSyncDesp()).addSnapshotListener((documentSnapshot, e) -> {
    if(e != null){
        Log.i("dados erro", Objects.requireNonNull(e).getMessage());
    }
    if(documentSnapshot != null){
        String nomeGrupo = Objects.requireNonNull(documentSnapshot.get("nomeGrupo")).toString();
        textNomeGrupo.setText(nomeGrupo);
        ArrayList membrosGrupo = (ArrayList) Objects.requireNonNull(documentSnapshot.get("syncDesp"));

    }
});

// Get User Details
FirebaseFirestore grupoFire = FirebaseFirestore.getInstance();
grupoFire.collection("usuarios")
        .whereEqualTo("syncDesp", prefs.getSyncDesp())
        .addSnapshotListener((queryDocumentSnapshots, e1) -> {
            listaUsuarios.clear();
            if(e != null){
                Log.i("dados erro", Objects.requireNonNull(e1).getMessage());
            }
            for(DocumentSnapshot usuarioSnapshot : Objects.requireNonNull(queryDocumentSnapshots).getDocuments()){
                String idU = (usuarioSnapshot.get("id") == null) ? "" : Objects.requireNonNull(usuarioSnapshot.get("id")).toString();
                String nomeUsuario = (usuarioSnapshot.get("nome") == null) ? "" : Objects.requireNonNull(usuarioSnapshot.get("nome")).toString();
                String fotoUsuario = (usuarioSnapshot.get("imgUsuario") == null) ? "" : Objects.requireNonNull(usuarioSnapshot.get("imgUsuario")).toString();

                UsuarioMeuGrupo usuarioMeuGrupo = new UsuarioMeuGrupo();//
                usuarioMeuGrupo.setIdUsuario(idU);
                usuarioMeuGrupo.setNome(nomeUsuario);
                usuarioMeuGrupo.setFoto(fotoUsuario);
                listaUsuarios.add(usuarioMeuGrupo);
            }

            adaptera.setOnItemClickRemoverListener(uMeuGrupo -> {
                Log.i("dados uMeuGrupo Clic", uMeuGrupo.getNome());
            });
            adaptera.notifyDataSetChanged();
        });

Group collection

我想知道是否应该从用户集合中单独查询组集合,或者是否只有一种方法可以从两个集合中检索数据。

1 个答案:

答案 0 :(得分:1)

无法在Cloud Firestore中进行跨多个集合的单个查询。没有像SQL中那样的类似于join的操作。唯一的例外是collection group queries,它不适用于您的情况。

您现在正在做的事情可能是您拥有的数据库结构可以做的最好的事情。如果您希望减少查询量,则必须采取一些措施来重组数据以支持该查询。