👻
【Firebase】Firestore Databaseで条件に一致したドキュメントを更新・削除する
はじめに
Firestore Databaseでデータ操作を行っている際に、ある条件に一致するドキュメントを更新・削除したいというシチュエーションがありました。
SQLで言うところの、UPDATE FROM [テーブル名] SET [カラム名] = [更新値] WHERE [条件];
や、
DELETE FROM [テーブル名] WHERE [条件];
のようなことをしたかったのです。
Firestore Databaseではどのようにできるのかな、ということをまとめました。
そもそも条件を絞るには
公式ページにわかりやすくまとまっていました。
それによると、例えば以下の場合は、SQLで言うところのSELECT * FROM cities WHERE state = 'CA';
のようなイメージですね。
// Create a reference to the cities collection
final citiesRef = db.collection("cities");
// Create a query against the collection.
final query = citiesRef.where("state", isEqualTo: "CA");
条件に一致したドキュメントを更新・削除する
では、UPDATE FROM [テーブル名] SET [カラム名] = [更新値] WHERE [条件];
やDELETE FROM [テーブル名] WHERE [条件];
のようなことはどうしたらいいのか...という話ですが、結論として『一発で更新・削除する方法はなさそう』でした。
なので、条件に見合うドキュメントを取得して、順番に更新処理を行なっていく形になります。
// Create a reference to the cities collection
final citiesRef = db.collection("cities");
// Create a query against the collection.
final query = citiesRef.where("state", isEqualTo: "CA");
// 取得したドキュメントを更新する
for(Cities cities in cities){
db.collection("cities").doc('1234567890abcdefg').update({'chief': 'MIKE'});
}
// 取得したドキュメントを削除する
for(Cities cities in cities){
db.collection("cities").doc('1234567890abcdefg').delete();
}
若干抵抗感があるのですが、
- 条件に一致するドキュメントを取得
- ループで取得したドキュメントを更新
で操作することで、擬似的にUPDATE FROM [テーブル名] SET [カラム名] = [更新値] WHERE [条件];
やDELETE FROM [テーブル名] WHERE [条件];
を実現しています。
Discussion