Если вы хотите получить весь массив dungeon_group
, вам нужно выполнить итерацию по Map
следующим образом:
Map<String, Object> map = documentSnapshot.getData();
for (Map.Entry<String, Object> entry : map.entrySet()) {
if (entry.getKey().equals("dungeon_group")) {
Log.d("TAG", entry.getValue().toString());
}
}
Но учтите, что даже если объект dungeon_group
хранится в базе данных в виде массива, entry.getValue()
возвращает ArrayList
, а не массив.
Лучший подход для вас будет, если вы рассмотрите эту альтернативную структуру базы данных, в которой каждый group
является ключом в Map
, а все значения установлены в логическое значение true
:
dungeon_group: {
3P: true,
Urgent: true,
Mission Chalange: true
//and so on
}
Используя эту структуру, вы также сможете запрашивать ее, основываясь на свойстве, существующем на карте dungeon_group
, в противном случае, как в официальной документации :
Хотя Cloud Firestore может хранить массивы, it does not support
запрашивает элементы массива или обновляет отдельные элементы массива.
Изменить 13 августа 2018 г .:
Согласно обновленной документации относительно членства в массиве , теперь возможно фильтровать данные на основе значений массива, используя метод whereArrayContains()
. Простым примером будет:
CollectionReference citiesRef = db.collection("cities");
citiesRef.whereArrayContains("regions", "west_coast");
Этот запрос возвращает каждый городской документ, где поле регионов представляет собой массив, содержащий west_coast. Если в массиве есть несколько экземпляров значения, по которому вы запрашиваете, документ включается в результаты только один раз.