Firebaseでデータの読み込み、書き込み、更新を行う
目次
1.目的
2.データ操作の基本
3.データ取得
4.データ追加
5.データ更新
6.まとめ
1.目的
備忘録として
[前提条件]
・Firebaseの構築に関しては、もう終わっている。
(Firestoreの設定も含めて)
2.データ操作の基本
FirestoreにアクセスするためのAPIは既に用意されている。
データ操作の基本として、以下の構文が基本となる。
firebase.firestore() − ①
.collection('[コレクション名]') − ②
.where('[フィールド名]' ,'[比較演算子]' ,[検索する値]) − ③
.orderBy('オーダーをかけるフィールド名' ,'[asc or desc]') − ④
.limit([整数]) − ⑤
上記が基本構造となる。
必須項目は ①、②
任意項目は ③、④、⑤
また、whereはメソッドチェーンで繋げることができる。
この時、重要となるのが、「Firebaseは'AND'条件のみサポートしている」という点である。
現在は、'OR'条件は利用できない。
また、利用できる比較演算子は以下の通り。
・'=='
・'>'
・'>='
・'<'
・'<='
・'in'
・'array-contains'
・'arrat-contains-any'
上記の中で説明が必要なのは、以下だと思う。
・'array-contains'
・'arrat-contains-any'
'array-contains' は、配列形式で持っているデータの中から、完全一致する文言を探す。
こんな書き方
.where('[コレクション名]' ,'array-contains' ,'りんご')
'arrat-contains-any' は上記の拡張版で配列形式で持っているデータの中から、完全一致する文言を複数個探す。
こんな書き方
.where('[コレクション名]' ,'array-contains-any' ,['りんご', 'みかん'])
3.データ取得
データ操作の基本を踏まえ、取得は以下の様な記載方法となる。
firebase.firestore()
.collection('[コレクション名]')
.where('[フィールド名]' ,'[比較演算子]' ,[検索する値])
.orderBy('オーダーをかけるフィールド名' ,'[asc or desc]')
.limit([整数])
.get();
記載しているのはjsなので、結果を待たない。
上記メソッドはpromise関数なので、「then()」を使うなり、「async await」を使うなりして取得する。
4.データ追加
firebase.firestore()
.collection('[コレクション名]')
.add(
{
'name':'フルーツ',
'number':1,
available:true,
'fruit':[
'りんご',
'みかん'
],
'creater':[{
'生産者':'AA農場',
'電話番号':'080-0000-0000'
}],
[{
'生産者':'BB農場',
'電話番号':'090-1111-1111'
}]
}
);
こんな感じ。
色々な型を使える。
[]は配列indexが自動でインクリメントされて生成される。
{}はkeyとvalueを指定できる。
例えば「'creater'」は以下の様に保存される。
[0] => 生産者 => 'AA牧場'
電話番号 => '080-0000-0000'
[1] => 生産者 => 'BB牧場'
電話番号 => '090-1111-1111'
ドキュメントIDは、何も指定しなければ自動生成される。
ドキュメントIDとは、そのデータを表す一意の特定を行うために作成されるID。
実は追加のメソッドは「add()」だけでなく「set()」も使えるが、多分使わない方が無難。
この辺は説明すると長くなるので、一旦省略。
もしも、ドキュメントIDを指定したい場合は、set()を利用する必要があるが、その場合は・・・いずれ書くかもしれません。
5.データ更新
firebase.firestore()
.collection('[コレクション名]')
.doc(ドキュメントID)
.update(
{
available:false,
}
);
上記で追加したデータを更新すると考えたときに、他のフィールドは変更なく、「available」フィールドのみ更新される。
更新でも「set()」メソッドを使えるが、使わない方が無難。理由は(ry
6.まとめ
まずは基本を覚えて、
.get()
.add()
.update()
を覚えれば、基本的にはfirestoreを使える。