Могу ли я запросить и посмотреть, существует ли одно значение в двух разных полях в Firestore? - PullRequest
0 голосов
/ 24 апреля 2020

Я серьезно пересматриваю изменение моей текущей структуры базы данных. Я пытаюсь создать систему друзей. У меня в структурированном виде

friendships(collection)
    friendship (document)
         userID1
         userID2

На бумаге это выглядело хорошо, но теперь у меня возникают проблемы с отображением друзей нынешних пользователей. Мне нужны документы .whereField("userID1", isEqualTo: currentUserID) ИЛИ .whereField("userID2", isEqualTo: currentUserID), потому что текущий пользователь может находиться в любой позиции. Можно ли искать документ в разных полях с тем же значением, что и логическое ИЛИ?

Ответы [ 2 ]

0 голосов
/ 25 апреля 2020

Я собираюсь выбросить этот ответ, так как фактический подход не ясен из вопроса.

Я бы предложил следующее

users
   uid_0
      name: "Captain Stubing"
      friends:
         uid_1: true
         uid_2: true
      friend_of:
         uid_2: true
   uid_1
      name: "Doc"
      friends:
         uid_2: true
      friend_of:
         uid_0: true
   uid_2
      name: "Gopher"
      friends:
         uid_0: true
      friend_of:
         uid_0: true
         uid_1: true
  • Капитан Стабинг два друга, Do c (uid_1) и суслик (uid_2), и он друг Gopher (uid_2)

  • У c есть друг Gopher и друг Капитана Стабинга

  • У Суслика есть друзья Капитан Стабинг и До c, а также друг Капитана Стабинга

Эта структура позволяет легко получить друзей двумя способами

1) Если вы являетесь текущим пользователем, прочитайте свой собственный узел друзей, чтобы получить учетные данные всех ваших друзей.

2) Отменить этот процесс и запросить узел users для всех пользователей списки friends_of, где значение uid текущего пользователя равно true

Это своего рода высокоуровневый ответ, поэтому вы можете захотеть сохранить отношения в совершенно отдельном узле, поэтому, например, вы ' запросить адрес пользователя, который вы не читаете в кучу ненужных данных.

0 голосов
/ 24 апреля 2020

Нет, невозможно выполнить логическое ИЛИ, используя два разных поля.

Вы можете сделать это, выполнив два запроса или добавив третье поле, которое является массивом обоих идентификаторов пользователя, затем используйте массив-содержащий запрос, чтобы найти любой идентификатор в новом поле.

.whereField("bothIDs", arrayContains: currentUserId)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...