Как в официальной документации :
Хотя 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
}