LoginSignup
3
4

More than 3 years have passed since last update.

FireStore 最低限(CRUD)

Last updated at Posted at 2019-09-16

やりたいこと

  • アプリ等に実装する前にローカル(Mac + node)でDB操作を確認したい。

前提

  • Firebaseのアカウントがある
  • プロジェクトを作成し、DB(Firestore)作成済み

手順

作業する場所作成

midir fire_test
cd fire_test
npm init -f
npm install --save firebase-admin
touch index.js

テンプレートファイル作成

index.js
const admin = require('firebase-admin');

var serviceAccount = require("./firebase-key.json"); //このファイルを管理画面から落としてくる

admin.initializeApp({
    credential: admin.credential.cert(serviceAccount),
    databaseURL: "https://{project}.firebaseio.com"
});

var db = admin.firestore();

key(秘密鍵ファイル)の入手

管理画面(左ペインの歯車クリック) -> ユーザーと権限 -> サービスアカウント

動作確認

値の追加(Create)

上記テンプレートに追加のためのコードを1行追加。

index.js
const admin = require('firebase-admin');

var serviceAccount = require("./firebase-key.json");

admin.initializeApp({
    credential: admin.credential.cert(serviceAccount),
    databaseURL: "https://expo-test1.firebaseio.com"
});

var db = admin.firestore();

//値を追加
var docRef = db.collection('users').doc('0001').set({name:'hoge',age:33});

実行後、管理画面で下記のようにデータの追加が確認できればOK。

スクリーンショット 2019-09-17 8.00.32.png

基本動作(CRUD)

Create(Insert)

既にやりましたが、collectionとdocを指定した上でset()を利用します。

db.collection('users').doc('0001').set({name:'hoge',age:33});

ちなみに同じdoc名でset()を実行すると、完全に上書きされるので注意が必要です。

db.collection('users').doc('0001').set({address:'tokyo',tel:'03-1111-2222'});

ドキュメントに要素(フィールド)を追加したい場合はUpdateを利用します。
存在しないフィールドの場合は追加され、既存のフィールドはUpdateされます。

db.collection('users').doc('0001').update({address:'tokyo',tel:'03-1111-2222'});

READ(Select)

リードは下記のように行います。

db.collection('users').get()
    .then((snapshot)=>{
        snapshot.forEach((doc)=>{
            console.log(doc.id + "-" + JSON.stringify(doc.data()));
        })
    })
    .catch(e => console.log(e));

doc.data()の内容が展開されるよう、JSON.stringify()しています。

Update

updateは下記のような感じ。既存フィールドだと更新、無いフィールドだと追加されます。

db.collection('users').doc('0001').update({ age: 44 });

Delete

削除はdelete()を実行するだけ。

db.collection('users').doc('0001').delete();

なお、フィールドを削除したい場合は、下記のようにします。

let fieldValue = admin.firestore.FieldValue;
db.collection('users').doc('0001').update({age:fieldValue.delete()});

nullでupdateしてもnullが入った状態となり、フィールドは削除されません。

書き方

なお、上記のようにcollectionとdocを都度していしなくても、

let docRef = db.collection('users').doc('0001');

のように参照を定義し、参照に対してset,update,deleteを行えます。

docRef.set();
docRef.update()
docRef.delete()

必要に応じて追加します。

参考

3
4
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
3
4