▼ DataBase, NoSQL/MongoDB

MongoDB | Java(자바) 연동 및 기본 CRUD 구현하기

Valar 2022. 1. 28. 20:46
반응형

이전 글) MongoDB | Windows 10, MongoDB 설치하기

MongoDB RDBMS
Database Database
Collection Table
Document Tuple/Row
Field Column
Primary Key ( Default _id ) Primary Key

 

📌 Dependency (mongodb-driver) 추가

Maven

<dependencies>
    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongodb-driver-sync</artifactId>
        <version>4.4.1</version>
    </dependency>
</dependencies>

Gradle

implementation 'org.mongodb:mongodb-driver-sync:4.4.1'

 

 

📌 MongoDB 접속 및 데이터베이스 접근하기

접속 URI를 통해 MongoClient를 생성하고 데이터베이스를 가져온다.

 

import com.mongodb.client.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MongoConfig {

    private static final String URI = "mongodb://localhost:27017";
    private static final String DATABASE = "sample";

    @Bean
    public MongoDatabase mongoDatabase() {
        MongoClient mongoClient = MongoClients.create(URI);
        MongoDatabase database = mongoClient.getDatabase(DATABASE);
        return database;
    }
}

 

 

📌 생성자 주입 및 기본 CRUD 메서드 구현

private static final String COLLECTION = "person";
private final MongoDatabase mongoDatabase;

public MongoRestController(MongoDatabase mongoDatabase) {
    this.mongoDatabase = mongoDatabase;
}

 

INSERT - 등록

mongoDatabase에서 등록 할 collection를 가져온 뒤 documemt를 등록한다.

 

@GetMapping("/insert")
public void insertOne() {
    MongoCollection<Document> collection = mongoDatabase.getCollection(COLLECTION);

    Document document = new Document();

    document.append("name", "Tom");
    document.append("age", "25");

    InsertOneResult result = collection.insertOne(document);
    System.out.println("==> InsertOneResult : " + result.getInsertedId());
}

@GetMapping("/insert-many")
public void insertMany() {
    MongoCollection<Document> collection = mongoDatabase.getCollection(COLLECTION);

    List<Document> insertList = new ArrayList<>();

    Document document1 = new Document();
    Document document2 = new Document();

    document1.append("name", "Marin");
    document1.append("age", "56");

    document2.append("name", "Jenny");
    document2.append("age", "35");

    insertList.add(document1);
    insertList.add(document2);

    InsertManyResult result = collection.insertMany(insertList);
    System.out.println("==> InsertManyResult : " + result.getInsertedIds());
}

 

FIND - 조회

finyById 메서드에서는 Unique index인 id를 이용해서 eq, ( _id == 값) 단건 조회한다.

 

@GetMapping("/find")
public void find() {
    MongoCollection<Document> collection = mongoDatabase.getCollection(COLLECTION);

    FindIterable<Document> doc = collection.find();

    Iterator itr = doc.iterator();

    while (itr.hasNext()) {
        System.out.println("==> findResultRow : "+itr.next());
    }
}

@GetMapping("/find-id")
public void findById(@RequestParam String id) {
    MongoCollection<Document> collection = mongoDatabase.getCollection(COLLECTION);

    Document doc = collection.find(eq("_id", new ObjectId(id))).first();
    System.out.println("==> findByIdResult : " + doc);
}

 

UPDATE - 수정

updateOne 메서드에서는 eq, (_id == 값) 조건에 해당되는 document를 수정한다.
updateMany 메서드에서는 gt,  (age > 값) 조건에 해당되는 document를 모두 수정한다.

 

@GetMapping("/update")
public void updateOne(@RequestParam String id) {
    MongoCollection<Document> collection = mongoDatabase.getCollection(COLLECTION);

    Bson query = eq("_id", new ObjectId(id));

    Bson updates = Updates.combine(
            Updates.set("name", "modify name"),
            Updates.currentTimestamp("lastUpdated"));

    UpdateResult result = collection.updateOne(query, updates);
    System.out.println("==> UpdateResult : " + result.getModifiedCount());
}

@GetMapping("/update-many")
public void updateMany(@RequestParam String age) {
    MongoCollection<Document> collection = mongoDatabase.getCollection(COLLECTION);

    Bson query = gt("age", age);

    Bson updates = Updates.combine(
            Updates.set("name", "modify name"),
            Updates.currentTimestamp("lastUpdated"));

    UpdateResult result = collection.updateMany(query, updates);
    System.out.println("==> UpdateManyResult : " + result.getModifiedCount());
}

 

DELETE - 삭제

deleteOne 메서드에서는 eq,  (_id == 값) 조건에 해당되는 document를 삭제한다.
deleteMany 메서드에서는 gt,  (age > 값) 조건에 해당되는 document를 모두 삭제한다.

 

@GetMapping("/delete")
public void deleteOne(@RequestParam String id) {
    MongoCollection<Document> collection = mongoDatabase.getCollection(COLLECTION);

    Bson query = eq("_id", new ObjectId(id));

    DeleteResult result = collection.deleteOne(query);
    System.out.println("==> DeleteResult : " + result.getDeletedCount());
}

@GetMapping("/delete-many")
public void deleteMany(@RequestParam String age) {
    MongoCollection<Document> collection = mongoDatabase.getCollection(COLLECTION);

    Bson query = gt("age", age);

    DeleteResult result = collection.deleteMany(query);
    System.out.println("==> DeleteManyResult : " + result.getDeletedCount());
}

 

📌비교 연산자

이름 설명
지정된 값과 같은 값을 찾습니다.
지정된 값보다 큰 값을 찾습니다.
지정된 값보다 크거나 같은 값과 일치합니다.
배열에 지정된 값 중 하나와 일치합니다.
지정된 값보다 작은 값과 일치합니다.
지정된 값보다 작거나 같은 값을 찾습니다.
지정된 값과 같지 않은 모든 값과 일치합니다.
배열에 지정된 값과 일치하지 않습니다.

 

GitHub

https://github.com/conf312/mongodb-java.git

Reference

https://docs.mongodb.com/drivers/java/sync/current/quick-start/

 

반응형