Today
-
Yesterday
-
Total
-

ABOUT ME

-

  • MongoDB | Java(자바) 연동 및 기본 CRUD 구현하기
    ▼ DataBase, NoSQL/MongoDB 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/

     

    반응형

    '▼ DataBase, NoSQL > MongoDB' 카테고리의 다른 글

    MongoDB | 기본 CRUD 시작하기  (0) 2022.01.27
    MongoDB | 윈도우 MongoDB 설치하기  (0) 2022.01.16

    댓글

Designed by Tistory.