0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Cloud Functions for FirebaseからFirestore を齧ってみた

Posted at

初めに

あまりに久しぶりなので、アカウントがどこいったか状態でした
Unityでライトゲームを作ってたらデータを保存やらなんやらが必要になったのでFirebaseをいじった
最初はUnityからFireStoreを操作してたんだけど、サーバ側処理がどうしても必要だったのでfunctionsでやったのだけど
Firestoreは自分が知ってるRDBMSの世界とちょっと違ったので整理してみた

環境

Mac上にVSCode入れてFirebaseEmulatorを入れ、Firestoreとfunctionsで色々実装している
NodeJSの上のJavascript
多分、どの開発環境でもクラスの構成やらメソッドは同じ。
(ただし、環境によってはメソッドが実装されていないものがある模様。Unity版とか特に・・・)

大体の掴み

Database⇨Collection⇨Document⇨Dataという階層構造の模様
実装自身は○○Referenceというものと、◯◯Snapshotというのでできている

大事なこと

本来はこちらを参照するべき
https://firebase.google.com/docs/reference

助けになりそうなクラス達

自分でごっちゃになったのでまとめてみた
実装例は気が向いたら別文章にする、、、かな?
※メソッドは全部網羅はしておりません

Firestore
ここで使うのは、collectionとバッチ、トランザクションくらいか。

Return Property 説明
App app サーバインスタンス
Return Method arg 説明
WriteBatch batch バッチの準備
CollectionReference collection path コレクションリファレンスを返す
Query collectionGroup id コレクションIDが含まれるコレクショングループを作るqueryを返す
DocumentReference doc pathToDoc パスに示されたドキュメントリファレンスを返す
Promise runTransaction トランザクションの準備

CollectionReference
Queryとして使うことの方が多いかもしれない
Queryの派生クラスなのでQueryも同じメソッド、プロパティがある

Return Property 説明
string id コレクションのID
Return Method arg 説明
DocumentReference add DataObject ドキュメントの追加、IDは自動生成
DocumentReference doc path ドキュメントリファレンスの取得
Query endAt docShot そのドキュメントが最後になるQueryを返す
Query endAt FieldValue 指定されたフィールドが最後になるqueryを返す
Query endBefore endAtと同じ endAtの一つ前
Query startAt  endAtと同じ endAtのStart版
Query startAfter endAtと同じ StartAtの一つ後ろ
Query where fieldName,,option,value where節。条件フィールド、条件、条件データ
Query orderby fieldName,option ordeeby節。ソートフィールド、オプション(asc,desc)
Query limit number 取得数を制限する
Query limitToLast number 最後に一致した結果を指定数返すクエリーを返す
Promise QuerySnapshot get 多分、Collectionでは使わぬ(全件取得)

DocumentReference

Return Property 説明
string id DocumentのID
string path Documentへのpath
Return Method arg 説明
CollectionReference collection path サブコレクションの取得など
Promise update Object ドキュメントを更新(ドキュメントがなければ失敗) 
Promise set    Object   ドキュメントを更新(なければ追加)
Promise delete ドキュメントを削除
Promise DocumentSnapshot get ドキュメントの実態を取得

QuerySnapshot
Query実行⇨結果をForEachで回しながら何かをする、とか。

Return Property 説明
Array docs QueryDocumentSnapshotの配列を返す
number size docsのサイズ
boolean empty 空かどうか
Query query このSnapshotを作成したQueryを返す
Return Method arg 説明
Array docChanges Snapshotを取得してから変更されたDocumentChangeの配列を返す
forEach 説明不要?

DocumentSnapshot/QueryDocumentSnapshot
基本的には同じ。
QueryDocumentSnapshotはQuerySnapshotのForEachで使うのでExistsは常にTrueでUndefinedはない

Return Property 説明
boolean exists そのドキュメントがあるか
string id ドキュメントのID
DocumentReference ref そのドキュメントのReference
Return Method arg 説明
Object data ドキュメントデータが入ったオブジェクト。ドキュメントがないとundefined
Any get fieldName フィールドデータ
boolean isEqual DocumentSnapshot 引数と同じかどうか

FieldValue
更新時にフィールドデータに特定の値を入れたい時に使う。すべてStaticメソッド

Return Method arg 説明
FieldValue arrayRemove array 更新時に配列フィールドから削除する要素を準備する
FieldValue arrayUnion array 更新時に配列フィールドに追加する要素を準備する
FieldValue delete 更新時にそのフィールドを削除するようマークする
FieldValue increment num 更新時に数字をインクリメントする
FieldValue serverTimestamp 更新時にサーバ側のタイムスタンプを使う

TransactionとWriteBatch
トランザクションは読み込みが先でないと失敗する
データを取得し、それに加工して更新する時など。

Return Method arg 説明
Transaction delete Documentreference ドキュメントを削除する
Promise DocumentSnapshot get DocumentReference ドキュメントを取得する
Transaction set DocumentReerence,Object ドキュメントの更新(ドキュメントがない場合追加)
Transaction update DocumentReference,Object ドキュメントの更新(ドキュメントがないと失敗)、ネストのデータも更新可能

WriteBatch
複数の更新を一気にやりたいとき
commit以外はTransactionと同じメソッド。戻りがWriteBatchになる

Return Method arg 説明
WriteBatch delete Documentreference ドキュメントを削除する
Promise DocumentSnapshot get DocumentReference ドキュメントを取得する
WriteBatch set DocumentReerence,Object ドキュメントの更新(ドキュメントがない場合追加)
WriteBatch update DocumentReference,Object ドキュメントの更新(ドキュメントがないと失敗)、ネストのデータも更新可能
Promise commit バッチ処理の実行

続く

かな?

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?