Firestore: получение документов по полю в их подколлекции - PullRequest
0 голосов
/ 20 июня 2020

Я создаю приложение для чата, поэтому у меня есть чаты и пользователи. В каждом чате есть подколлекция под названием Список пользователей, в основном это список пользователей, которые находятся в этом чате. enter image description here enter image description here I need to show to users only their chatrooms (chats they're participating). For now I made another subcollection in every user document. This collection contains Chatroom documents.

введите описание изображения здесь

И это нормально работает. Но я думаю, что это можно решить без использования дополнительных подколлекций чатов в пользовательских документах. Может быть, по запросу. Итак, мне нужен такой запрос:

Query chatrooms = FirebaseFirestore.getInstance()
    .collection("Chatrooms")
    .document() //Here's the problem, I need to query through every document, not just through specific one
    .collection("User List")
    .whereEqualTo("user_id", userId);

Это как-нибудь сделать?
И еще вопрос, эффективно ли это или, может быть, мне стоит остановиться на моем предыдущем решении?

1 Ответ

1 голос
/ 20 июня 2020

То, что вы ищете, - это запрос группы сбора . Таким образом, вы можете выполнять запросы по всем подколлекциям User List для поиска пользовательских документов.

db.collectionGroup("User List").whereEqualTo("user_id", userId).get()
  .addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
      @Override
      public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
          for (QueryDocumentSnapshot document : queryDocumentSnapshots) {
             Log.i("User", document.getId());
             Log.i("Chat room", document.getReference().getParent().getParent().getId());
          }
      }
  });
...