遍历子集合以获取字段-Firestore Android

时间:2018-09-03 18:04:09

标签: java android firebase google-cloud-firestore

每个Notification ID集合仅包含一个文档,我想对ToseefShop1中的所有集合进行迭代,并获取各自的文档名称和字段数据。

数据模型:

enter image description here 子集合:

enter image description here enter image description here 代码:

dbRef.collection("Shop Notifications")
        .document("ToseefShop1")
        .get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
    @Override
    public void onSuccess(QuerySnapshot querySnapshot) {
        // Dont know what to do
    }
});

这不是重复的问题。另一个问题(有人建议与之重复)是关于javascript的,而答案是关于Node.js的。没有接受答案。实际上,我在Firestore Java中找不到getcollections()方法。

3 个答案:

答案 0 :(得分:4)

Firestore中无法查询文档以获取其下的子集合。为了获得所需的文档名称和字段数据,首先需要具有子集合的名称,然后在引用中使用它们。如果您只有2个子集合,建议您使用以下代码:

FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
Query firstQuery = rootRef
    .collection("Shop Notifications")
    .document("ToseefShop1")
    .collection("Notification ID:0");
Query secondQuery = rootRef
    .collection("Shop Notifications")
    .document("ToseefShop1")
    .collection("Notification ID:1");

Task firstTask = firstQuery.get();
Task secondTask = secondQuery.get();

Task combinedTask = Tasks.whenAllSuccess(firstTask, secondTask).addOnSuccessListener(new OnSuccessListener<List<Object>>() {
    @Override
    public void onSuccess(List<Object> list) {
         //Do what you need to do with your list
    }
});

答案 1 :(得分:2)

(使用Android / iOS / JavaScript SDK)无法获取文档的(子)集合列表。您必须知道集合的标识符才能访问它们。

从问题附带的注释中,我了解到每个文档的子集合标识符都将有所不同(可能还有它们的编号)。因此,一种解决方法可能是在父文档中维护一个子集合的标识符列表(例如,作为类型数组的字段)。

答案 2 :(得分:0)

您可以使用Cloud Function列出给定文档的所有子集合。

Read Approach #2: Use a Cloud Function

在页面中间。

方法1:将列表保存在父文档的专用字段中

与此处的其他答案非常相似,但您可能希望 second 方法比 first 方法要多得多,因为第二种方法效率更高,生产率更高,更便宜,并且您的数据库比第一种方法更容易维护。