🚐
【Spring Data MongoDB】Updateアノテーションを用いて複数ドキュメントを更新
概要
Spring Data MongoDBでドキュメントのupdateを行う際は、SpringBoot + MongoDB を使ってREST APIを作ってみようの記事にある通り、repository経由で一度findでオブジェクトを取得した後にsaveするという実装が多いかなと思います。
単一ドキュメントならこの実装で良いのですが、複数ドキュメントに対して一律更新をかけたい場合はどうするのかというののメモ書きです。
前提
- 使用したSpring Data MongoDBのバージョンは
4.3.0です。 - 今回はJavaでの実装を前提としています。(Kotlinでもほぼ同様の実装でいけるとは思いますが)
対応案
対応方法はいくつかあると思いますが、今回はrepositoryでUpdateアノテーションを設定する方法を試してみました。
MongoDB-specific Data Manipulation Methodsの公式ドキュメントにある通り、メソッドのByの後に抽出対象のフィールド、Updateアノテーションの中にsetの内容を設定することができます。なお、抽出条件をカスタムで設定したい場合はQueryアノテーションも追加できます。
実装サンプル
以下はuserAccountIdとparentCategoryIdを指定して、指定に合致したドキュメントのparent_category_idフィールドをnullに更新するという内容です。
@Update("{ '$set' : { 'parent_category_id' : null } }")
public void findAndSetParentCategoryIdNullByUserAccountIdAndParentCategoryId(String userAccountId, String parentCategoryId);
Discussion