Как искать неизвестную коллекцию, содержащую идентифицирующие поля документа? - PullRequest
0 голосов
/ 23 мая 2019

Можно ли искать неизвестную коллекцию, содержащую документ с полями идентификации, такими как электронная почта?

Моя структура такая:

Каждый пользователь получает собственную коллекцию на основе уникального идентификатора. Каждая коллекция содержит документ пользователя и документ аккаунта. Документ пользователя содержит информацию о пользователе, которого я хотел бы найти. Учетные документы содержат набор банковских счетов, по которым я хочу переводить деньги между пользователями.

Моя проблема заключается в том, что я не хочу, чтобы пользователи вводили длинный уникальный идентификатор для входа в коллекцию, а печатал электронную почту пользователя, находящуюся в документе collection \ user. Адрес электронной почты уникален.

Я только что создал плохую структуру для своего проекта или я могу что-то сделать?

My Structure

ОБНОВЛЕНИЕ
Спасибо, Alex и Frank за отзыв. Я продолжил и изменил свою структуру, как показано:
/users/$uid/accounts/$accountid.

Сделал java Query collectionReference = db.collection("users").whereEqualTo("uEmail", userEmail); и сохранил document.getId() как String userId.

I Затем используйте UserId в spinner, чтобы позволить пользователю выбрать учетную запись из коллекции userId.

Ответы [ 2 ]

2 голосов
/ 23 мая 2019

Как сказал Алекс, невозможно загрузить данные из коллекции (с помощью клиентских SDK), если вы не знаете имя коллекции.

Но в этом случае кажется, что ваши коллекции названы в честь UID пользователя.

Это означает, что если пользователь вошел в систему, вы можете узнать его коллекцию по:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
CollectionReference userCollection = FirebaseFirestore.getInstance().collection(uid);

Несколько замечаний:

  • Это гораздо более идиоматичносохранить свою структуру с коллекцией верхнего уровня users, а затем документом для каждого пользователя в этом разделе, а затем вложенными коллекциями для других данных в , которые .Так, например: /users/$uid/accounts/$accountid.
  • У серверных SDK do есть метод для получения списка коллекций, например, как этот метод listCollections в узле.js SDK .Но эти SDK должны использоваться только в доверенной среде, такой как ваш компьютер для разработки, сервер, которым вы управляете, или облачные функции, а не непосредственно на клиенте.Однако даже с этим SDK вам придется перебирать список коллекций и проверять каждую из них по очереди, потому что, как сказано выше: вы можете читать данные только из коллекции, имя которой вам известно.
  • Если выПри попытке найти коллекцию / UID другого пользователя, а не пользователя, вошедшего в приложение, может потребоваться сопоставить адрес электронной почты с UID.Такая функциональность недоступна в клиентских SDK.Но, как и в предыдущем пункте, в Admin SDK есть метод getUserByEmail .
2 голосов
/ 23 мая 2019

Можно ли искать неизвестную коллекцию, содержащую документ с полями идентификации, такие как электронная почта?

Нет, вы должны знать имя своей коллекции, чтобы иметь возможностьиспользовать его в вашей ссылке.В путях к облачному хранилищу Firestore к коллекциям / документам есть никаких подстановочных знаков.Вы должны идентифицировать каждую коллекцию и каждый документ по их конкретным идентификаторам.

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