Firebase с Angular: исключить поле из запроса - PullRequest
0 голосов
/ 31 августа 2018

Я хотел бы знать, может ли моя структура использоваться с FireBase или мне нужно изменить. Вот один пример с / rooms, который содержит массив Room:

export class Room {
    id: number;
    password: string;
    state: number;
    messages: Message[] = [];
}

и сообщение:

export class Message{
    author: string;
    message: string;
    playerExcluded: string;

}

Теперь мне нужно загрузить комнату без пароля (полагаю, эта часть возможна?) И где message.playerExcluded! = Firebase.auth (). CurrentUser.uid (выглядит сложнее).

Это означает, что у каждого пользователя будут все сообщения, кроме сообщений, в которых они исключены. Одним из решений может быть загрузка полей без объектов из Room (таких как id, state), а затем другой запрос для загрузки сообщения, но это не кажется оптимальным.

Возможно или слишком сложно в одном запросе? Любое предложение?

1 Ответ

0 голосов
/ 31 августа 2018

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


Из документации Firebase:

Если данные вместо этого разбиты на отдельные пути, также называемые денормализацией, их можно эффективно загружать в отдельных вызовах по мере необходимости. Рассмотрим эту уплощенную структуру:

{
  // Chats contains only meta info about each conversation
  // stored under the chats's unique ID
  "chats": {
    "one": {
      "title": "Historical Tech Pioneers",
      "lastMessage": "ghopper: Relay malfunction found. Cause: moth.",
      "timestamp": 1459361875666
    },
    "two": { ... },
    "three": { ... }
  },

  // Conversation members are easily accessible
  // and stored by chat conversation ID
  "members": {
    // we'll talk about indices like this below
    "one": {
      "ghopper": true,
      "alovelace": true,
      "eclarke": true
    },
    "two": { ... },
    "three": { ... }
  },

  // Messages are separate from data we may want to iterate quickly
  // but still easily paginated and queried, and organized by chat
  // conversation ID
  "messages": {
    "one": {
      "m1": {
        "name": "eclarke",
        "message": "The relay seems to be malfunctioning.",
        "timestamp": 1459361875337
      },
      "m2": { ... },
      "m3": { ... }
    },
    "two": { ... },
    "three": { ... }
  }
}

Также из документации:

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

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