Firestore中如何在SnapshotListener内获取文档的子集合数据?
获取Firestore文档子集合的所有文档
嘿,这事儿其实挺简单的!你已经能拿到父文档了,要获取它的子集合,只需要通过父文档的引用调用collection()方法指定子集合名称,然后查询这个子集合里的文档就行。
直接给你修改后的代码示例,你可以根据自己的实际情况替换名称:
for (DocumentChange doc : queryDocumentSnapshots.getDocumentChanges()) { if (doc.getType() == DocumentChange.Type.ADDED) { String somestr = doc.getDocument().getString("someField"); // 1. 获取目标子集合的引用,把"your-sub-collection"换成你的子集合名称 CollectionReference subCollection = doc.getDocument().collection("your-sub-collection"); // 2. 查询子集合里的所有文档(异步操作) subCollection.get().addOnCompleteListener(task -> { if (task.isSuccessful()) { // 3. 遍历子集合的每个文档 for (QueryDocumentSnapshot subDoc : task.getResult()) { // 4. 获取子文档里的String字段,把"sub-field"换成你的字段名 String subFieldValue = subDoc.getString("sub-field"); // 这里可以做你需要的处理,比如打印、存储到列表里等等 System.out.println("子集合文档字段值:" + subFieldValue); } } else { // 处理查询失败的情况,比如打印错误信息 Exception error = task.getException(); if (error != null) { error.printStackTrace(); } } }); } }
另外给你两个小提示:
- 如果需要实时监听子集合的变化(比如子集合新增、修改、删除文档时自动触发),可以把
get().addOnCompleteListener()换成addSnapshotListener(),用法和你外层的监听器类似 - 因为Firestore的操作都是异步的,所以不要在
get()外面直接尝试获取子集合的结果,一定要在回调里处理
内容的提问来源于stack exchange,提问作者Paradox
相关产品推荐
相关产品推荐

