やりたいこと
- アプリ等に実装する前にローカル(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。
基本動作(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()
必要に応じて追加します。