Итерация по подколлекциям для получения полей - Firestore Android - PullRequest
0 голосов
/ 03 сентября 2018

Каждая коллекция 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. Без ответа принято. Infact Я не могу найти метод getcollections () в Java Firestore.

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Нет способа (с помощью SDK для Android / iOS / JavaScript) получить список (под) коллекций документа. Вы должны знать идентификаторы коллекций, чтобы получить к ним доступ.

Из комментариев, прилагаемых к вопросу, я понимаю, что идентификаторы подгруппы будут отличаться для каждого документа (и, вероятно, их количество также). Следовательно, одним из обходных путей может быть сохранение списка идентификаторов вложенных коллекций в родительском документе (например, в виде поля типа массив).

0 голосов
/ 04 сентября 2018

В 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
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...