Firebase Cloud Firestore - получить коллекцию из четного числа сегментов - PullRequest
0 голосов
/ 29 мая 2018

У меня есть такая база данных Shop > warehouse > categories > cat1,cat2,.., и у каждой категории есть имя и свои документы.Я просто хочу только категории, и я попытался с этим кодом:

firestore.collection("shop/warehouse").addSnapshotListener(new EventListener<QuerySnapshot>() {
        @Override
        public void onEvent(@javax.annotation.Nullable QuerySnapshot queryDocumentSnapshots, @javax.annotation.Nullable FirebaseFirestoreException e) {
            if(queryDocumentSnapshots != null) {
                for (DocumentSnapshot doc : queryDocumentSnapshots) {
                    String item = doc.getId();
                    Log.d("TEST ITEM", item);
                }
            } else Log.d(TAG, "queryDocumentSnapshots is null.");
        }
    });

Но, как и ожидалось, я получил эту ошибку:

Invalid collection reference. Collection references must have an odd number of segments, but shop/warehouse has 2

Так что я погуглил и нашел решениеэто предлагает разделить в коллекции / документе , и я написал это:

firestore.collection("shop/").document("warehouse").addSnapshotListener(new EventListener<DocumentSnapshot>() {
        @Override
        public void onEvent(@javax.annotation.Nullable DocumentSnapshot documentSnapshot, @javax.annotation.Nullable FirebaseFirestoreException e) {
            Map<String, Object> map = documentSnapshot.getData();
            Log.d("size", map.keySet().size()+"");
        }

Но этот набор ключей (я предположил, что они являются именами категорий) пуст.Как мне это сделать?Помилуй меня, я впервые с Firebase!

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Нет API, который бы просто перечислял идентификаторы документов, которые существуют в коллекции.Вам нужно будет запросить и прочитать все документы в коллекции, чтобы получить идентификаторы.

0 голосов
/ 29 мая 2018

Чтобы решить эту проблему, измените следующую строку кода:

firestore.collection("shop/").document("warehouse").addSnapshotListener(/* ... */);

на

firestore.collection("shop").document("warehouse").addSnapshotListener(/* ... */);

В этом нет необходимости /.Вы можете использовать ссылку, подобную этой, "shop/warehouse" только в базе данных Firebase Realtime, где все объекты называются дочерними, и вы можете объединить все дочерние элементы в один путь.Это более элегантный способ, но, к сожалению, он не разрешен в Cloud Firestore.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...