Strukturierung der Daten für die Chat-App in Firebase

Im folgenden Firebase-Leitfaden zuStrukturierung von Daten für eine Chat-App. Sie schlagen die folgende Struktur vor.

{
  // 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
  // converation ID
  "messages": {
    "one": {
      "m1": {
        "name": "eclarke",
        "message": "The relay seems to be malfunctioning.",
        "timestamp": 1459361875337
      },
      "m2": { ... },
      "m3": { ... }
    },
    "two": { ... },
    "three": { ... }
  }
}

Wie strukturiere ich meine Benutzerdaten so, dass ich auf einfache Weise eine Liste aller Chats anzeigen kann, zu denen sie gehören, und für jeden die letzte Nachricht und den letzten Zeitstempel. Wenn ich die folgende Struktur mache:

   "users": {
    "ghopper": {
      "name": "Gary Hopper",
      "chats": {
          "one: true",
          "two": true
      }
    },
    "alovelace" { ... }
  },

Ich kann auf einfache Weise eine Liste jeder Chat-Gruppe für einen bestimmten Benutzer abrufen, z. B. ghopper, indem ich (in kürzester Zeit) Folgendes tue:

ref.child("users").child("ghopper").child("chats").observeSingleEventOfType(.Value, withBlock: { (snapshot) in
  //do something with data
}

In diesem Schnappschuss sind jedoch nicht die letzte Nachricht und der letzte Zeitstempel enthalten. Was muss ich tun, um auf diese Daten zuzugreifen?

Duplizieren Sie alle diese Daten für jeden Benutzer? Hinzufügen von Benutzern / ghopper / chats / one / {"lastMessage": "ghopper: Relaisfehler gefunden. Ursache: Motte.", "Zeitstempel": 1459361875666}Fragen Sie für jeden Chat, zu dem der Benutzer gehört, nach "chats / specificGroupId" (Hinzufügen mehrerer Listener)?Etwas anderes?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage