Firebase Firestore: Как получить доступ к коллекции из другой коллекции - PullRequest
0 голосов
/ 10 февраля 2020

Я использую Vue. js и Firebase Firestore. Теперь у меня есть две коллекции users и orders. В коллекции заказов я уже сохранил идентификатор каждого документа user коллекции. Теперь я должен получить информацию о соответствующих пользователях из этого. Как я должен go об этом? Это то, что я сделал до сих пор

let orderRef = db.collection("orders")
orderRef.onSnapshot(snapshot => {
  snapshot.docChanges().forEach(change => {
    if (change.type == "added") {
      let doc = change.doc;
      this.orders.push({
        id: doc.id,
        orderData: doc.data().orderData,
        user_id: doc.data().user_id,
        userInfo: db.collection("users").doc(user_id),
      });
    }
  });
});

Мне нужно хранить пользовательские данные в userInfo. Заранее спасибо

Ответы [ 2 ]

1 голос
/ 10 февраля 2020

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

. В Firestore отношения обычно моделируются путем сохранения идентификатора документа, который вы хотите «ссылаться». В этом смысле вам может не понадобиться хранить документ «users» внутри «order», но поля «user_id» будет достаточно. Предостережение заключается в том, что эта компоновка данных имеет цену необходимости извлечения 'user_id' из заказов, прежде чем вы сможете получить фактические пользовательские данные. Вы можете прочитать больше о денормализации данных и моделировании отношений в статьях link1 , link2 и других thread .

Также стоит отметить, что Размер документов Firestore ограничен 1 МБ, поэтому с вашей фактической конфигурацией, если объем информации о «пользовательских» документах увеличивается, он может достичь точки, в которой потребуется изменить структуру ваших документов.

В целом , если вы не хотите изменять макет данных, вам нужно будет следовать рекомендациям Ked и сначала получить данные «пользователей», чтобы вставить их в поле «userInfo».

1 голос
/ 10 февраля 2020

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

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