FIrestoreでCRUD
ここに出てくる変数の定義とか
code:ts
import Firebase from 'firebase/app';
import 'firebase/firestore';
const db = Firebase.initializeApp(firebaseConfig).firestore();
Create
code:ts
// Add a new document in collection "cities"
db.collection("cities").doc("LA").set({
name: "Los Angeles",
state: "CA",
country: "USA"
})
.then(() => console.log("Document successfully written!"))
.catch((error) => console.error("Error writing document: ", error));
ここではLAというdocumentをcollection citiesに新規作成している
作成に成功したらthen
作成に失敗したらcatch
codeは一部改変
同じdocumentが合った時に、上書きではなく追記にしたいときは{merge: true}をsetの第二引数に渡す
code:ts
db.collection("cities").doc("LA").set({
name: "Los Angeles",
state: "CA",
country: "USA"
}, {merge: true})
documentの名前を自動IDで割り当てたい場合は以下のどちらかを使う。
doc().set()
docの引数を省略する
add()
Read
collectionからdocumentを一つ取得する
get()を使う
doc.existsで、指定したdocumentが存在するかどうかを判定できる
code:ts
db.collection("cities").doc("SF")
.get()
.then((doc) => doc.exists ?
console.log("Document data:", doc.data()) :
// doc.data() will be undefined in this case
console.log("No such document!"))
.catch((error) => console.log("Error getting document:", error));
codeは一部改変
get()の引数に{source: 'cache'}を渡すと、serverを無視しcache storageからdocumentを読み込むようにできる
collectionの全てのdocumentを取得する
collection()から直接get()を呼び出す
code:ts
db.collection("cities").get()
.then((querySnapshot) => querySnapshot
.forEach((doc) =>
// doc.data() is never undefined for query doc snapshots
console.log(${doc.id} => %o, doc.data())
)
);
codeは一部改変
Update
あるcollectionの特定のdocumentを更新する
update()を使う
code:ts
db.collection("cities").doc("DC")
// Set the "capital" field of the city 'DC'
.update({capital: true})
.then(() => console.log("Document successfully updated!"))
.catch((error) =>
// The document probably doesn't exist.
console.error("Error updating document: %o", error));
codeは一部改変
値の更新に使える便利関数がいろいろ用意されている
timestamp
配列
数値のincrement
Delete
特定のdocumentを削除する
code:ts
db.collection("cities").doc("DC").delete()
.then(() => console.log("Document successfully deleted!"))
.catch(() => console.error("Error removing document: ", error));
codeは一部改変
別途手動で削除する必要がある
少なくともfront endから削除するのは推奨されない方法のようだ
field (documentの値) を削除する
updateで削除したことを表す値を渡すようだ
code:ts
// Remove the 'capital' field from the document
db.collection('cities').doc('BJ')
.update({
capital: firebase.firestore.FieldValue.delete()
});
codeは一部改変
複数のdocumentsを一度にCRUDしたい場合はここを参照 最大500個まで一度に操作できる