Как получить доступ к значениям полей в подколлекции Firestore - PullRequest
1 голос
/ 16 октября 2019

Моя база данных выглядит следующим образом:

Picture

Как получить доступ к значениям полей, отображаемых в «Зеленой области», если у меня нет имени Коллекции«Красная область»?

  • Как пройти через коллекции «красная область», чтобы найти все из них с полем «RequestStatus», равным «Завершено»?

Ответы [ 2 ]

2 голосов
/ 16 октября 2019

Нельзя получить значение документа без сбора. Поэтому я предлагаю изменить название коллекции на статус дружбы. Затем вы можете легко получить поля документов.

Это должно быть так:

FriendShip

---->Current User id

     --->Friendship Status

         -----> Document id

Тогда вы можете использовать orderby или Equalto Функция.

Код для вышеуказанной структуры.

mfirebaseFirestore.collection("Friendship").document(mCurrentUser).collection("FriendshipStatus")
                .whereEqualTo("RequestStatus", "Completed")
                .get()
                .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<QuerySnapshot> task) {
                        if (task.isSuccessful()) {
                            for (QueryDocumentSnapshot document : task.getResult()) {
                                Log.d("abc", document.getId() + " => " + document.getData());
                            }
                        } else {
                            Log.d("abc", "Error getting documents: ", task.getException());
                        }
                    }
                });

Примечание:

Whereequalto работает, когда вы пытаетесь найти данные в сборе. Таким образом, вы должны запросить до сбора. Затем используйте whereequalto для документов, похожих на ваш запрос

1 голос
/ 16 октября 2019

Как указано в документации , невозможно перечислить подколлекцию документа с помощью клиентских SDK (Android, iOS, Web).

С другой стороны, «getCollections() метод серверных клиентских библиотек Cloud Firestore перечисляет все вложенные коллекции ссылки на документ».

Поскольку кажется, что вы используете Android SDK, вам нужно найти обходной путь. Одним из возможных путей решения этой проблемы является сохранение имен вложенных коллекций в выделенном поле в родительском документе. Например, вы можете использовать поле Array для хранения всех имен вложенной коллекции.

Обычно вы заполняете это поле при создании первого документа вложенной коллекции с помощью Android SDK.

В случае, если по какой-либо причине вы не можете сделать это с клиента, вы можете использовать облачную функцию, которая опирается на Admin SDK и, следовательно, может использовать метод getCollections(), упомянутый выше.

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