Firestore, как запрашивать данные из коллекции, где ссылка на документ содержит конкретный путь запроса - PullRequest
0 голосов
/ 30 июня 2018

Как запросить данные из коллекции, где ссылка на документ содержит конкретный путь?

Вот моя база данных Firestore, зарегистрированный пользователь является ссылочным типом документа, сопоставленный ссылочный документ из другой коллекции.

enter image description here

Здесь мне нужно получить все данные из коллекции userinfo , где ссылка на документ пользователя содержит конкретный путь (например: player / 8SLuNWrI09UIuUfNe7ZR / playerinfo )

Я пробовал следующий запрос, но, кажется, не работает:

Query query = mFirebaseFirestore.collection("userinfo").whereGreaterThanOrEqualTo("user", "player/8SLuNWrI09UIuUfNe7ZR/playerinfo");

Код для получения данных из запроса:

query.addSnapshotListener(new EventListener<QuerySnapshot>() {
                @Override
                public void onEvent(QuerySnapshot queryDocumentSnapshots, FirebaseFirestoreException e) {
                    //queried data here
                }
 });

В документе нет примера для запроса Firestore со ссылочным типом документа.

Пожалуйста, помогите мне запросить список документов из коллекции, где ссылка на документ имеет определенный путь.

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

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

Однако, если вы хотите получить все документы, которые существуют в коллекции playerinfo, просто используйте вызов get(). Не используйте addSnapshotListener(), если вам не нужно получать данные в режиме реального времени.

Существует решение, в котором вам нужно преобразовать свойство user в тип String и использовать запрос, который выглядит следующим образом:

Query query = = mFirebaseFirestore.collection("userinfo").whereEqualTo("user", "player/8SLuNWrI09UIuUfNe7ZR/playerinfo");

Но помните, это будет работать, только если свойство user содержит значение типа String, равное:

player/8SLuNWrI09UIuUfNe7ZR/playerinfo`

и не :

player/8SLuNWrI09UIuUfNe7ZR/playerinfo/qY0D7Vef...
                                       ^      ^

Есть еще один способ, которым вы можете решить это. Запросите всю коллекцию, получите все значения свойства user и добавьте их к List, преобразовав их из Reference в String. В конце просто переберите список и используйте метод contains() для каждого элемента.

0 голосов
/ 30 июня 2018

Вы просто хотите получить документ по его местонахождению в базе данных:

mFirebaseFirestore.collection("userinfo").document("8SLuNWrI09UIuUfNe7ZR").get()

Нет необходимости запрашивать запрос, если вы знаете конкретный документ для извлечения.

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