2
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.

Firestoreにトリガーを仕掛けて、データ登録時に自動でプロパティを追加する方法

Last updated at Posted at 2022-07-17

Firestoreにデータを登録する際に、サーバ側で現在日時のプロパティをデータに追加する例を以下に示します。

参考

手順

1. Cloud FirestoreでCollectionを作っておく

image.png

2. Cloud Functionsをセットアップする

以下の手順に従う。
https://firebase.google.com/docs/functions/get-started

3. あらかじめ用意されている、index.jsを以下のように書き換える

index.js
const functions = require("firebase-functions");

// addDateTimeが関数名となる。
// regionを指定しないと、us-central1にfunctionが出来てしまったので、明示的に東京(asia-northeast1)を指定している。
exports.addDateTime = functions.region("asia-northeast1").firestore
    .document("ここにcollection名を指定/{docId}")
    .onCreate((snap, context) => {
      snap.ref.set({"addedField": new Date()}, {merge: true});
    });

setメソッドの説明
https://googleapis.dev/nodejs/firestore/latest/DocumentReference.html#set

4. コードをデプロイする

$ firebase deploy --only functions

Functionsのトップ画面を見ると、関数が追加されている。
image.png

5. Firestoreにデータを登録する

管理コンソール画面から手動で追加した例
image.png

6. 自動でプロパティ追加

管理コンソール画面で数秒待った後、表示が更新され、プロパティが追加されていることが確認できた。

image.png

備考

FirestoreのデータをREST APIで取得すると、デフォルトで、createTime, updateTimeプロパティが自動で付与されておりますが、GCP内部で使用するデータと思われるため、明示的に付与する例を上記に示しました。

{
  "documents": [
    {
      "name": "projects/projectIDは伏せておく/databases/(default)/documents/collection1/IewJlzFPfrItKiay9Ve9",
      "fields": {
        "addedField": {
          "timestampValue": "2022-07-17T16:00:44.165Z"
        },
        "name": {
          "stringValue": "hoge"
        }
      },
      "createTime": "2022-07-17T16:00:41.213663Z",
      "updateTime": "2022-07-17T16:00:48.588309Z"
    }
  ]
}
2
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
2
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?