LoginSignup
8
6

More than 5 years have passed since last update.

Firebaseのデータベースにネスト保存する方法

Last updated at Posted at 2017-01-22

データベースへの保存方法はデフォルトのリファレンスを確認するとして、
ネストでpushする方法などが情報としてまとまっっていなかったのでここにまとめます。

データ保存のメソッドおさらい

メソッド 使用例
set() users// など、定義済みのパスへのデータの書き込みや、データの置換を行います。
push() データのリストに追加します。push() を呼び出すたびに、Firebase によって一意のキーが生成されます。このキーは user-posts// のような一意の ID としても使用できます。
update() データのすべてを置換することなく、定義済みのパスのキーの一部を更新します。
transaction() 同時更新によって破損する可能性がある複合データを更新します。

前提はネストはなるべく最小化すること

Firebaseでは最大32の深さまでデータをネストさせることができます。
ただし、基本的にはパフォーマンスや管理方法などの観点から極力ネストは浅く管理することが推奨されています。

非推奨
{
  "chats": {
    "one": {
      "title": "Historical Tech Pioneers",
      "messages": {
        "m1": { "sender": "ghopper", "message": "Relay malfunction found. Cause: moth." },
        "m2": { ... }
      }
    },
    "two": { ... }
  }
}
推奨
{

  "chats": {
    "one": {
      "title": "Historical Tech Pioneers",
      "lastMessage": "ghopper: Relay malfunction found. Cause: moth.",
      "timestamp": 1459361875666
    },
    "two": { ... },
    "three": { ... }
  },

  "members": {
    "one": {
      "ghopper": true,
      "alovelace": true,
      "eclarke": true
    },
    "two": { ... },
    "three": { ... }
  },

  "messages": {
    "one": {
      "m1": {
        "name": "eclarke",
        "message": "The relay seems to be malfunctioning.",
        "timestamp": 1459361875337
      },
      "m2": { ... },
      "m3": { ... }
    },
    "two": { ... },
    "three": { ... }
  }
}

しかしながら、場合によってはデータをグルーピングしたほうが設計として正しいこともあろうかと思います。
そんな場合のデータの追加方法を記します。

基本的なデータの追加方法(例としてpushメソッド)

let hogeRef = this.database.ref('hoge');
hogeRef.push({
        text: "hogehoge"
})
結果
{
  "hoge" : {
      "text": "hogehoge"
  }
}

ネストさせるデータの追加方法(同じくpushメソッド)

let hogeRef = this.database.ref('hoge');
hogeRef.child('fuga').push({
        text: "hogehoge"
})
結果
{
  "hoge" : {
      "fuga": {
          "text": "hogehoge"
      }
  }
}

.child()をはさめばいいだけです。

以上。

8
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
6