Лучший способ смоделировать отношения с друзьями для опроса друзей пользователя с помощью firestore - PullRequest
0 голосов
/ 11 мая 2019

Я хочу опросить всех пользователей, с которыми дружит пользователь (user1), в одном запросе с firestore.

В настоящее время у меня есть поле "друзья" в каждом объекте пользователя, поэтому, чтобы получить друзей, которые являются друзьями с пользователем user1, я звоню:

friendsOfUser1 = db.collection ('users'). Where ('friends', 'array-contains', user1) .stream ().

Это хорошо работает, когда у пользователей всего <100 друзей, но после этого пользовательские объекты становятся очень большими, поскольку массив user.friends имеет много значений. Это делает получение пользовательских объектов дорогим. </p>

Есть ли способ сохранить массив друзей вне пользовательских документов, но при этом можно запросить друзей пользователя одним запросом? Вот какая сейчас структура:

user1: {friends: ["user2", "user3", "user7", "user9"], имя: "Джон Ски"}

user2: {friends: ["user1", "user4", "user8", "user12"], название: "Площадь Эльмо"}

user3: {friends: ["user1", "user7", "user9"]}

so db.collection ('users'). Where ('friends', 'array-contains', user1) .stream () выдаст [user2, user3].

1 Ответ

0 голосов
/ 11 мая 2019

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

/users
    /{uid}
        /friends
            /{friendId1}
            /{friendId2}
            /{friendId3}

Чтобы выяснить, есть ли у user1 user2 в качестве друга, все, что вам нужно сделать, это получить документ, используя идентификаторы двух пользователей: / users / user1 / friends / user2. Если документ существует, существует связь.

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