Android Firebase Firestore SDK: Как заказать документы из коллекции, в соответствии с полем документов другой коллекции? - PullRequest
0 голосов
/ 13 апреля 2020

Моя идея состоит в том, чтобы создать похожую и непохожую систему для постов (пользователю может нравиться и не нравиться пост) и показать список пользователей во фрагменте, упорядоченный таким образом: топ-пользователь - тот, для которого наиболее многочисленные лайки.

В моей базе данных Firebase Firestore:

  • У меня есть коллекция сообщений. Каждый документ (который является публикацией) содержит идентификатор пользователя, который его создал, и счетчик лайков (я называю это "A").

  • У меня есть другая коллекция, пользователи. Каждый документ (который является пользователем) содержит счетчик (я называю его «B»), который подсчитывает количество лайков, всех сообщений вместе взятых.

На данный момент я использую " B ", чтобы заказать пользователей в списке пользователей, который я описал выше. Я использую «B» следующим образом: return FirebaseFirestore.getInstance().collection("users").orderBy("likes", Query.Direction.DESCENDING);.

Однако из-за некоторых технических фактов, связанных с правилами безопасности Firebase, и для упрощения структуры базы данных я бы хотел использовать только «A», и удалить "B". Точнее, я бы хотел получить всех пользователей и упорядочить их по «А». Однако счетчик «А» определен в документах коллекции сообщений, тогда как счетчик «В» определен в документах коллекции пользователей: это облегчает использование.

Так что мой Вопрос в том, что для каждого пользователя мне нужно было бы получить все их сообщения, затем суммировать их счетчик «А», затем получить всех пользователей, затем упорядочить их в соответствии с этой суммой. Однако я хотел бы знать: возможно ли это сделать с помощью Firebase Firestore Android API? (что-то вроде инструкции, приведенной ранее) Другими словами: Как заказать документы из коллекции Согласно области документов другой коллекции? Но обратите внимание, что на самом деле это сложнее, так как я должен суммировать счетчик "A" каждого сообщения, созданного пользователем.

1 Ответ

2 голосов
/ 13 апреля 2020

То, что вы пытаетесь сделать, это, по сути, операция типа «соединение», которая не поддерживается Firestore. Запрос Firestore может одновременно рассматривать документы только в одной коллекции. Если у вас есть данные из двух коллекций, которые будут использоваться для генерации результатов запроса, у вас будет по крайней мере два запроса для выполнения.

Единственная реальная альтернатива, которую вы имеете, - это ввести третью коллекцию с данными, уже объединенными из две другие коллекции, которые поддерживают запрос, который вы хотите сделать. Это часто встречается в базах данных типа No SQL и называется «денормализация».

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