Firestore:按字段在其子集合中获取文档

时间:2020-06-20 13:21:03

标签: android firebase google-cloud-firestore

我正在构建一个聊天应用程序,所以我有一个聊天室和用户。每个聊天室都有一个名为“用户列表”的子集合,基本上是位于此聊天室中的用户列表。 enter image description here enter image description here 我只需要向用户显示其聊天室(他们正在参与的聊天)。现在,我在每个用户文档中都做了另一个子集合。该集合包含聊天室文档。

enter image description here

这正常。但是我认为可以解决此问题,而无需在用户文档中使用聊天室的其他子集合。也许通过查询。所以我需要这样的查询:

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 个答案:

答案 0 :(得分:1)

您要寻找的是collection group query。这样,您可以查询所有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());
          }
      }
  });