在Firebase上存储数据以供以后查询

在Firebase上存储数据以供以后查询,firebase,react-native,react-native-firebase,Firebase,React Native,React Native Firebase,我们有一个将数据存储在Firebase(数据库)上的应用程序,稍后将对其进行查询 存储数据的正确格式是什么 示例数据将是completedGames。他们将有如下数据: 用户ID 完成时间 游戏数据 等等 稍后的查询将按用户ID查找所有已完成的游戏。我们希望确保以最好的方式收集数据,以便以后查询,而不是以后重构。在您的情况下,首先-确保您有充分的理由使用Firebase而不是Firestore。一旦您确信应该坚持使用Firebase实时数据库,请参阅下面的文档摘录。因此,实际上可能有两个独立的父

我们有一个将数据存储在Firebase(数据库)上的应用程序,稍后将对其进行查询

存储数据的正确格式是什么

示例数据将是completedGames。他们将有如下数据:
用户ID
完成时间
游戏数据
等等


稍后的查询将按用户ID查找所有已完成的游戏。我们希望确保以最好的方式收集数据,以便以后查询,而不是以后重构。

在您的情况下,首先-确保您有充分的理由使用Firebase而不是Firestore。一旦您确信应该坚持使用Firebase实时数据库,请参阅下面的文档摘录。因此,实际上可能有两个独立的父节点,一个用于userId,另一个用于游戏。每个游戏节点的子节点都是一个特定的游戏,它有一个游戏用户的子树(通过userId)

如果数据被拆分为单独的路径,则也称为 非规范化,可在单独调用中高效下载, 因为它是需要的。考虑这个扁平结构:

{
  // 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": { ... }
  }
}