Как сделать запрос коллекции пользователей, используя массив идентификаторов из группы - PullRequest
0 голосов
/ 26 мая 2019

У меня есть коллекция, где я храню группы пользователей.У каждой группы есть имя группы, лимит группы и массив идентификаторов пользователей.

Интересно, как лучше всего получить сведения об одной группе, а затем сведения о пользователях, такие как имя, фотография и т. Д.

Сейчас я делаю два запроса к базе данных.Во-первых, получение данных группы (имя и т. Д.), Во-вторых, получение списка пользователей, в которых есть информация о идентификаторе группы:

"syncDesp = a4sQ27xb1wuD2rhONU2K"

I'mбоюсь звонить в базу данных много раз.

// 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 Ответ

1 голос
/ 26 мая 2019

Невозможно сделать один запрос в Cloud Firestore, охватывающий несколько коллекций.Нет такой операции соединения, как у вас в SQL.Единственное исключение из этого - запросы групп сбора , которые не применимы к вашей ситуации.

То, что вы делаете сейчас, вероятно, лучшее, что вы можете сделать со структурой базы данных, которую выиметь.Если вам нужно меньше запросов, вам придется что-то сделать, чтобы реструктурировать ваши данные для поддержки этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...