Android Firestore объединяет 2 коллекции в вид переработчика - PullRequest
0 голосов
/ 23 февраля 2019

У меня есть коллекция пользователей с uId, name, photo

У меня есть коллекция посещений с uId, userId, location

У меня есть просмотрщик, в котором я хочу показать местоположение симя пользователя и фотография

Можно ли использовать тип справочного поля?Если это так, как Firestore узнает, что связывает посещения: .userId == users.uId?

Может быть, мне сначала нужно запросить все посещения, а затем запросить соответствующего пользователя, но 2 вещи:

  1. Это означает, что нужно много раз запрашивать.

  2. Я не понял, как собрать объединенную коллекцию в адаптер, основанный на одном запросе?

Пожалуйста, совет. Спасибо

текущий код

visitsList = db.collection("visitsList");
Query query = visitsList.whereEqualTo("userId",prefs.getString("id","")).orderBy("visitDate", Query.Direction.ASCENDING);
FirestoreRecyclerOptions<AVisit> options = new FirestoreRecyclerOptions.Builder<AVisit>().setQuery(query, AVisit.class).build();
adapter = new VisitsListAdapter(options, VisitsListActivity.this);
RecyclerView rv = findViewById(R.id.rvVisitsList);
rv.setHasFixedSize(true);
rv.setLayoutManager(new LinearLayoutManager(this));
rv.setAdapter(adapter);

Код представляет собой простой запрос из коллекции, не знаю, как получить имя и фотографию изПоле userId в этой коллекции.

1 Ответ

0 голосов
/ 23 февраля 2019

Можно ли использовать тип справочного поля?

Да, вы можете использовать справочное поле.

Если это так, как Firestore узнает о ссылке посещения.userId == users.uId?

Результаты Firestore всегда поступают из одной коллекции (на данный момент).Он не автоматически присоединяется к документу из коллекции пользователей, когда вы читаете из коллекции посещений.Вам придется сделать это самостоятельно.

Это действительно означает, что вы будете выполнять несколько операций чтения, но зачастую это происходит не так медленно, как вы думаете.См. Google Firestore - как получить документ по нескольким идентификаторам за одну поездку?


Обновление: для отображения данных из профиля пользователя в списке посещений существует два основныхопции:

  1. загрузить дополнительный пользовательский документ в populateView или с пользовательской parseSnapshot реализацией .

  2. дублируйте соответствующие пользовательские данные в коллекции посещений (что вполне нормально для баз данных NoSQL).Также смотрите ответ Алекса здесь: индексированный запрос с FirestoreRecyclerAdapter .

...