Запрос Firestore Android получить идентификатор документа, который содержит значение в поиске - PullRequest
0 голосов
/ 10 мая 2018

Образ базы данных Firestore

Здравствуйте, я только что попытался использовать Firestore. У меня возникли проблемы при получении идентификатора документа.

Вопрос в том, что я хочу получить идентификатор документа (красное поле), в котором есть значение (синее поле).

Я использую следующий запрос:

collection("mychannel").whereEqualTo("74wRU4xHrcV9oWAXEkKeRNp41c53")

Но не дал результатов.

Спасибо!

Ответы [ 2 ]

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

Как в официальной документации :

Хотя Cloud Firestore может хранить массивы, it does not support запрашивает элементы массива или обновляет отдельные элементы массива.

Так что нет способа , в котором вы можете использовать следующий запрос:

collection("mychannel").whereEqualTo("74wRU4xHrcV9oWAXEkKeRNp41c53")

Если вы хотите получить только весь массив userId, вам нужно перебрать Map следующим образом:

collection("mychannel").document("1fReXb8pgQvJzFdzpkSy").get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<DocumentSnapshot> task) {
        if (task.isSuccessful()) {
            DocumentSnapshot document = task.getResult();
            if (document.exists()) {
                Map<String, Object> map = document.getData();
                for (Map.Entry<String, Object> entry : map.entrySet()) {
                    if (entry.getKey().equals("userId")) {
                        Log.d("TAG", entry.getValue().toString());
                    }
                }
            }
        }
    }
});

Но учтите, что даже если объект userId хранится в базе данных в виде массива, entry.getValue() возвращает ArrayList, а не array.

Таким образом, вывод будет:

[74wRU4xHrcV9oWAXEkKeRNp41c53]

Лучший подход будет, если вы рассмотрите эту альтернативную структуру базы данных, где каждый идентификатор пользователя является ключом на карте, а все значения истинны:

userId: {
    "74wRU4xHrcV9oWAXEkKeRNp41c53": true,
    "AdwF...": true,
    "YsHs...": true
}
0 голосов
/ 10 мая 2018

Ответ на этот вопрос здесь: Firestore: Запрос по элементу в массиве документа

Таким образом, не используйте массивы для хранения данных в Firestore, так как запрос, который вы пытаетесь сделать, еще не доступен (помните, что он все еще находится в бета-версии). Вместо этого вы должны использовать карту.

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