Spring BootでMongo DBを荷恬する
峻さん、こんにちは。晦永蝕�kグル�`プの稼-看噛温敬温稼です。
噴屈屶の扮震では、怜の震は11扮゛13扮とされています。その�蕁◆胡�怜々や仝怜念?怜朔々などのように、怜に咀んだ査忖が聞われています。
云籾です。
MongoDBは謹くの冱�Zに��鬉靴討�り、その嶄でもJavaScriptとは�H才來が互いです。とはいえ、バックエンド�箸�Java冱�Zで���Bしているシステムは謹いのではないでしょうか。書指はJava冱�Z、蒙にSpring Boot (+Gradle)でMongoDBを荷恬する圭隈を�B初します。
朕肝
Spring Boot で Mongo DB
�扮牽�譜協指り��
1からプロジェクトを恬撹する魁栽は、の鮫中嘔�箸砲△誨栖肅v�Sから、仝Spring Data MongoDB々を弖紗して恬撹した圭が壼いです。貌た兆念で仝Mongo DB々がありますが、Spring Dataが戻工するクラス吉が聞えないので廣吭が駅勣です。

屡贋のプロジェクトで珂看稼乙看禽京を荷恬したい魁栽は、build.gradleの卆贋�v�Sに參和を弖紗します。
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-mongodb'
testImplementation 'org.springframework.boot:spring-boot-starter-data-mongodb-test'
// 麿福待
}application.propertiesに俊�A枠の雨檎鴛を峺協します。
spring.mongodb.uri=mongodb://localhost:27017/demo?directConnection=true參貧で�扮犬�屁いました。
MongoRepository
珂看稼乙看禽京を荷恬する圭隈は2つあります。まずはMongoRepositoryを聞った圭隈を府初します。
珂看糸艶鉛クラス
ドキュメントのモデルクラスを協吶します。@Document(collection = "users")で鯉追枠のコレクション兆を峺協します。
package com.example.demo.models;
import java.time.LocalDateTime;
import org.springframework.data.mongodb.core.mapping.Document;
import lombok.Data;
// ユ�`ザ�`秤�鵑魃3屬垢襯皀妊襯�ラス
@Data
@Document(collection = "users")
public class User {
private String id;
private String username;
private String email;
private String passwordHash;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
public User() {
this.createdAt = LocalDateTime.now();
this.updatedAt = this.createdAt;
}
public User(String username) {
this.username = username;
this.createdAt = LocalDateTime.now();
this.updatedAt = this.createdAt;
}
}檎艶沿看壊庄岳看姻霞クラス
MongoRepositoryを�@覚した、珂看稼乙看禽京にアクセスするためのリポジトリインタ�`フェ�`スを協吶します。
package com.example.demo.repository;
import java.util.List;
import com.example.demo.models.User;
import org.springframework.data.mongodb.repository.MongoRepository;
public interface UserRepository extends MongoRepository<User, String> {
public List<User> findByUsername(String username);
}遺看稼岳姻看鉛鉛艶姻クラス
協吶したリポジトリインタ�`フェ�`スを聞って珂看稼乙看禽京を荷恬します。
package com.example.demo;
import com.example.demo.models.User;
import com.example.demo.repository.UserRepository;
import java.util.List;
import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@Autowired
private UserRepository userRepository;
@GetMapping("/hello")
public String hello() {
// ユ�`ザ�`コレクションをクリアしてから仟しいユ�`ザ�`を隠贋
userRepository.deleteAll();
userRepository.save(new User("n-ozawan"));
// "n-ozawan" というユ�`ザ�`兆でユ�`ザ�`を�碧�
List<User> users = userRepository.findByUsername("n-ozawan");
// �碧��Y惚を猟忖双に���Qして卦す
return users.stream()
.map(User::toString)
.collect(Collectors.joining(", "));
}
}この圭隈のメリットはコ�`ドが酒準であり、辛�i來が互いことにあります。デメリットとしては、鹸�jな�碧�や鹿柴�I尖を燕�屬垢襪里墨渊腓�あることでしょうか。
サンプルを�g佩すると參和のドキュメントが恬撹されます。
[
{
_id: ObjectId('69a51963dc875a664921e217'),
username: 'n-ozawan',
createdAt: ISODate('2026-03-02T05:00:18.977Z'),
updatedAt: ISODate('2026-03-02T05:00:18.977Z'),
_class: 'com.example.demo.models.User'
}
]MongoTemplate
より悲罷に�碧�や鹿柴�I尖を佩いたい魁栽はMongoTemplateを聞います。モデルクラスもリポジトリクラスも勣りません。MongoTemplateだけで珂看稼乙看禽京を荷恬することができます。
package com.example.demo;
import java.util.List;
import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.bson.Document;
import org.springframework.data.mongodb.core.query.Query;
import static org.springframework.data.mongodb.core.query.Criteria.where;
import static org.springframework.data.mongodb.core.query.Query.query;
@RestController
public class Hello2Controller {
@Autowired
private MongoTemplate mongoTemplate;
@GetMapping("/hello2")
public String hello2() {
// MongoDBにドキュメントを�携襪靴討�ら�碧�する箭
Document doc = new Document("message", "Hello from MongoDB!")
.append("hoge", new Document("fuga", 123));
// コレクションを匯稀クリアしてから仟しいドキュメントを�携�
mongoTemplate.dropCollection("greetings");
mongoTemplate.insert(doc, "greetings");
// "message" フィ�`ルドが "Hello from MongoDB!" であるドキュメントを�碧�
Query query = query(where("message").is("Hello from MongoDB!"));
query.fields().include("message").exclude("_id");
List<Document> documents = mongoTemplate.query(Document.class)
.inCollection("greetings")
.matching(query).all();
// �碧��Y惚を猟忖双に���Qして卦す
return documents.stream()
.map(Document::toJson)
.collect(Collectors.joining(", "));
}
}MongoRepositoryに曳べて辛�i來が和がりますが、より悲罷な�碧�が佩えるようになります。
おわりに
MongoRepositoryでは、ドキュメントのフィ�`ルドがモデルクラスに卆贋するため、珂看稼乙看禽京の隔つスキ�`マレスなドキュメントを恬撹することができません。とはいえ、スキ�`マレスだからと冱ってなんでも徭喇にドキュメントを恬撹すると、ドキュメント寂の由匯來や�v銭來がなくなり、隠便來が寄きく鱒なわれます。
�g縞の蝕�kではMongoRepositoryでドキュメントの恬撹や酒�gな�碧�吉を佩いつつ、鹸�jな�碧�や鹿柴�I尖などをMongoTemplateで佩うなど、聞い蛍けながら蝕�kすることになるかと房います。
ではたま。
