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することになるかと房います。

ではたま。


Recommendおすすめブログ