ドキュメントの削除
ドキュメントの削除は非常に簡単です。削除対象のドキュメントを表すオブジェクトを指定して削除することも可能ですが、今回は条件にマッチするドキュメントを削除する方法を紹介します。
public class RemoveSample {
public static void main(String[] args) {
ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);
MongoTemplate mongoTemplate = ctx.getBean(MongoTemplate.class);
mongoTemplate.remove(new Query(Criteria.where("name").is("Scott")),Person.class);
}
}
条件の指定の仕方はfindやupdateMulti等の実行時と同じです。削除条件を組み立てたQueryクラスを引数として指定した上でremoveメソッドを実行します。
リポジトリの利用
これまでの内容で、Spring Data MongoDBを利用してMongoDBに対する基本的な処理は行えるようになりました。MongoTemplateには、これまでに紹介したもの以外にも多数のメソッドが存在します。このMongoTemplateだけでもMongoDBを利用したアプリケーションの開発は行えますが、データストアの直接的な操作手段を提供するMongoTemplateは低レベルなAPIということもできます。
Spring Data MongoDBは、ドメイン駆動開発におけるリポジトリがサポートされています。そこでさらに一歩進めて、リポジトリによるデータアクセスを行う例を最後に解説します。まず、リポジトリを利用するため以下のようなコンフィグレーションクラスを用意します。
@Configuration
@EnableMongoRepositories
public class AppConfig extends AbstractMongoConfiguration{
@Bean
public Mongo mongo() throws UnknownHostException {
Mongo mongo = new Mongo("localhost");
return mongo;
}
@Override
protected String getDatabaseName() {
return "example";
}
@Override
protected String getMappingBasePackage(){
return "org.sample.mongodb.repository";
}
}
次に、あらかじめ用意されているMongoRepositoryのサブインターフェースを用意します。
import org.springframework.data.mongodb.repository.MongoRepository;
public interface PersonRepository extends MongoRepository<Person, String>{
}
ジェネリック型には検索等の対象となる型とidの型を指定します。今回利用しているPersonクラスではidをString型で定義しているため、ここではStringを指定しています。
最後に実行クラスを用意します。今回は簡単に全件検索を行ってみます。
public class FindAllRepsitorySample {
public static void main(String[] args){
ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);
PersonRepository personRepository = ctx.getBean(PersonRepository.class);
List<Person> persons = personRepository.findAll();
for(Person person : persons){
System.out.println("id : " + person.getId());
System.out.println("name : " + person.getName());
System.out.println("age : " + person.getAge());
}
}
}
MongoTemplateを利用する場合との違いは、MongoTemplateのBeanを取得する代わりにPersonRepositoryを取得している点です。検索等の処理はPersonRepositoryを介して行います。MongoRepositoryを利用したサブインターフェースを用意することで、基本的なMongoDBのオペレーションに関するメソッドの実装が自動で提供されます。また、命名規則に則ったfindメソッドを用意することで、その実装は自動で用意されます。
サンプルとして、"age"の値が指定した数値より少ないドキュメントを検索するメソッドを定義してみます。
public interface PersonRepository extends MongoRepository<Person, String>{
List<Person> findByAgeLessThan(int age);
}
上記のように命名規則に則ったメソッドを定義するだけで、自分で実装する必要がありません。このようにリポジトリを利用することで、定型的なコーディングが不要になるというメリットがあります。
その他の規則や使用可能なキーワードは、公式ドキュメントの6.3章、表6.1に記載されていますのでご確認ください。
まとめ
駆け足とはなりましたが、全2回でMongoDBの基本からSpring Data MongoDBというフレームワークを利用した、Javaプログラムからのアクセス方法について解説をしてきました。
Spring Dataを利用することで、比較的簡単にMongoDBを利用したアプリケーション開発が行えるのではないでしょうか。Spring Data MongoDBには本稿で言及できなかった機能、オプションなどが存在します。また、現在も非常に活発に開発が続けられており、比較的短い頻度で新バージョンがリリースされていますので、興味を持った方はぜひ利用してみてください。
