Как получить наибольшее население в городе, используя Firestore? - PullRequest
0 голосов
/ 02 ноября 2018

Пожалуйста, помогите мне с этим. У меня есть это, как в документах:

cities
 \
  - San Francisco
        \
         - "population": 860000
 \
  - Los Angeles
        \
         - "population": 3900000
 \
  - San Francisco
        \
         - "population": 680000

Как отобразить город с наибольшим населением в эмуляторе? Я использую:

    cities = new ArrayList<>();
    db.collection("cities").get()
        .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
        @Override
        public void onComplete(@NonNull Task<QuerySnapshot> task) {
            if (task.isSuccessful()) {
            for (QueryDocumentSnapshot document : task.getResult()) {
                int population = Integer.valueOf(document.getData().get("population").toString());
                cities.add(population);
            }
            Collections.sort(cities);
            }
        }
        });

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

1 Ответ

0 голосов
/ 02 ноября 2018

Жарко, чтобы получить самое большое население в городе в Firestore?

Просто с помощью запроса, который выглядит следующим образом:

FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference citiesRef = rootRef.collection("cities");
Query query = citiesRef.orderBy("population", Direction.DESCENDING).limit(1);

Метод orderBy() вызывается для упорядочения городов по убыванию в соответствии со свойством population, а limit(1) вызывается для ограничения результатов только одним городом, городом с наибольшим населением.

Изменить:

Из другого вашего вопроса (на который я уже дал вам ответ) вы добавляете данные в базу данных с помощью метода add(). Это означает, что каждый раз, когда вы добавляете новый город, вы генерируете новый идентификатор документа. Другими словами, идентификатор документа - это случайно сгенерированный ключ, а , а не название города, как я вижу в вашей схеме.

Так что, если вы используете пример из официальной документации, помимо свойства population у вас также может быть name города.

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

query.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
    @Override
    public void onComplete(@NonNull Task<QuerySnapshot> task) {
        if (task.isSuccessful()) {
            for (QueryDocumentSnapshot document : task.getResult()) {
                if (document != null) {
                    String name = document.getString("name");
                    Log.d(TAG, name);
                }
            }
        }
    }
});

Вывод в вашем logcat будет:

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