Взаимодействие Flterster Firestore присоединяется - PullRequest
0 голосов
/ 03 июля 2019

Я делаю это во Flutter, с базой данных Firebase, используя пакеты Firestore во Flutter. Я хотел бы знать, как выполняется соединение в noSQL (или, более конкретно, во Flutter-Firestore)

Вот как выглядит моя база данных:

users: {
     U1: {
         name: 'Peter',
         surname: 'Jensen'
     },
     U2: {
         name: 'Marry',
         surname: 'Kown'
     },
     ...
}

groups: {
     G1: {
         name: 'Group 1'
     },
     G2: {
         name: 'Group 2'
     },
     ...
}

members: {
     M1: {
         userId: U1,
         groupId: G1
     },
     M2: {
         userId: U1,
         groupId: G2
     },
     M3: {
         userId: U2,
         groupId: G1
     },
     ...
}

Теперь, как мне сделать объединение, чтобы получить что-то вроде этого:

members: {
     M1: {
         userId: {
             name: 'Peter',
             surname: 'Jensen'
         },
         groupId: {
             name: 'Group 1'
         }
     },
     M2: {
         userId: {
             name: 'Peter',
             surname: 'Jensen'
         },
         groupId: {
             name: 'Group 2'
         }
     },
     M3: {
         userId: {
             name: 'Marry',
             surname: 'Kown'
         },
         groupId: {
             name: 'Group 1'
         }
     },
     ...
}

Должен ли я сделать:

const users = await Firestore.instance.collection('users').getDocuments();
const groups = await Firestore.instance.collection('groups').getDocuments();
const members = await Firestore.instance.collection('members').getDocuments();

...manually loop through everything and assign everything myself

(мне нужно добавить больше текста, потому что у меня «в основном код»): я предположил бы, что выше будет использовать много данных запросов в Firebase, поэтому я не понимаю, как это было бы хорошей идеей. На самом деле я просто хочу видеть в каких группах пользователь a в

1 Ответ

1 голос
/ 03 июля 2019

Если у вас есть группы и участники, я обычно храню следующие данные:

  • Список пользователей в коллекции users.
  • Для каждого пользователя I 'd сохраняют свои свойства и список идентификаторов групп тех групп, членами которых они являются.
  • список групп в коллекции groups.
  • Для каждой группы я бы сохранил их свойства

Обратите внимание, что вы можете смоделировать вложенный список как вложенную коллекцию, но обычно это не требуется.С помощью приведенной выше модели вы можете легко найти группы, в которые входит пользователь, даже сделать запрос для пользователей, входящих в определенную группу, с предложением array-contains.

Чтобы получить список свойствгруппы для конкретного пользователя, вам действительно нужно загрузить этого пользователя и его группы отдельно.Это нормально для многих баз данных NoSQL и не обязательно так медленно, как вы можете ожидать.Но если производительность недостаточно высока, вы можете продублировать некоторые данные, чтобы уменьшить потребность в объединениях.Все зависит от ваших потребностей, и в отличие от реляционных моделей данных, NoSQL не является догматичным в таких вещах.

Чтобы узнать больше об этой теме:

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