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からプロジェクトを恬撹する魁栽は、の鮫中嘔箸砲△誨栖肅vSから、仝Spring Data MongoDB々を弖紗して恬撹した圭が壼いです。貌た兆念で仝Mongo DB々がありますが、Spring Dataが戻工するクラス吉が聞えないので廣吭が駅勣です。

屡贋のプロジェクトで珂看稼乙看禽京を荷恬したい魁栽は、build.gradleの卆贋vSに參和を弖紗します。
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することになるかと房います。
ではたま。
