我正在构建一个聊天应用程序,所以我有一个聊天室和用户。每个聊天室都有一个名为“用户列表”的子集合,基本上是位于此聊天室中的用户列表。 我只需要向用户显示其聊天室(他们正在参与的聊天)。现在,我在每个用户文档中都做了另一个子集合。该集合包含聊天室文档。
这正常。但是我认为可以解决此问题,而无需在用户文档中使用聊天室的其他子集合。也许通过查询。所以我需要这样的查询:
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);
这有什么办法吗?
还有一个问题,这是否有效?或者我应该继续使用以前的解决方案?
答案 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());
}
}
});