250103 MongoDB (Java - CRUD, 동적인 칼럼 처리)

250103 에이콘 아카데미 수업에 기반하여 작성되었음을 알립니다.

NoSQL은 현재 SNS에 있는 구조가 제각기인 데이터들을 크롤링할 때 유리하다.

MongoDB - JAVA  (CRUD)

이전 글과 이어서 진행됩니다.

 

MongoDB shell

 

MongoTest2 (읽기)

public class MongoTest2 {
	
	// Customer 데이터를 저장하는 클래스
	static class Customer {
		private ObjectId id;
		private String name;
		private int age;
		private String gender;
		
		public Customer(ObjectId id, String name, int age, String gender) {
			this.id = id;
			this.name = name;
			this.age = age;
			this.gender = gender;
		}
		
		// 출력을 담당할 toString() 오버라이딩
		@Override
		public String toString() {
			return "id: " + id + ", name:" + name + ", age:" + age + ", gender:" + gender;
		}
	}

	public static void main(String[] args) {
		// MongoDB 연동 후 CRUD 연습
		String uri = "mongodb://localhost:27017";
		try (MongoClient mongoClient = MongoClients.create(uri)) {
			MongoDatabase db = mongoClient.getDatabase("test");
			MongoCollection<Document> collection = db.getCollection("customer");
			
			// 읽기
			List<Customer> clist = new ArrayList<MongoTest2.Customer>();
			
			for(Document doc : collection.find()) {
				// age 필드가 Integer 또는 String 일 수 있으므로 약간의 처리 필요
				Object ageObject = doc.get("age");
				int age = 0;
				if(ageObject instanceof Integer) {
					age = (Integer)ageObject;
				} else if (ageObject instanceof String) {
					try {
						age = Integer.parseInt((String)ageObject);
					} catch (NumberFormatException e) {
						System.out.println("Invalid Format : " + ageObject);
					}
				}
				
				Customer customer = new Customer(doc.getObjectId("_id"),
						doc.getString("name"), age, doc.getString("gender"));
				clist.add(customer);
			}
			
			for(Customer cus : clist) {
				System.out.println(cus.id + " " + cus.name + " " +
							cus.age + " " + cus.gender + " ");
			}
			
			System.out.println("건수 : " + collection.countDocuments());
		} catch (Exception e) {
			System.out.println("Exception : " + e);
		}
	}
}

 

MongoTest2 (추가)

public class MongoTest2 {
	... 생략

	public static void main(String[] args) {
		// MongoDB 연동 후 CRUD 연습
		String uri = "mongodb://localhost:27017";
		try (MongoClient mongoClient = MongoClients.create(uri)) {
			MongoDatabase db = mongoClient.getDatabase("test");
			MongoCollection<Document> collection = db.getCollection("customer");
			
			// 추가
			Document newData = new Document("name", "임형근").append("age", 30).append("gender", "남");
			collection.insertOne(newData);
			
		... 생략
}

 

MongoTest2 (수정)

public class MongoTest2 {
	
	... 생략

	public static void main(String[] args) {
		// MongoDB 연동 후 CRUD 연습
		String uri = "mongodb://localhost:27017";
		try (MongoClient mongoClient = MongoClients.create(uri)) {
			MongoDatabase db = mongoClient.getDatabase("test");
			MongoCollection<Document> collection = db.getCollection("customer");
			
            ...생략
			
			// 수정, 삭제 대상 Document 검색
			// eq : import static com.mongodb.client.model.Filters.eq;
			Document fCustomer = collection.find(eq("name", "임형근")).first();
			
			if(fCustomer != null) {
				ObjectId cusId = fCustomer.getObjectId("_id");
				
				// 수정 : 나이와 성별 수정
				collection.updateOne(eq("_id", cusId),
					Updates.combine(Updates.set("age", 19), Updates.set("gender", "여"))
					);
			}
}

 

MongoTest2 (삭제)

public class MongoTest2 {
	
	... 생략

	public static void main(String[] args) {
		// MongoDB 연동 후 CRUD 연습
		String uri = "mongodb://localhost:27017";
		try (MongoClient mongoClient = MongoClients.create(uri)) {
			MongoDatabase db = mongoClient.getDatabase("test");
			MongoCollection<Document> collection = db.getCollection("customer");
						
		... 생략
				
				// 삭제
				collection.deleteOne(eq("_id", cusId));
				
			} else {
				System.out.println("해당 고객 없음");
			}
			... 생략
}


MongoDB - JAVA (동적인 칼럼 처리)

MongoTest3

public class MongoTest3 {

	public static void main(String[] args) {
		String uri = "mongodb://localhost:27017";
		try (MongoClient mongoClient = MongoClients.create(uri)) {
			MongoDatabase db = mongoClient.getDatabase("test");
			MongoCollection<Document> collection = db.getCollection("customer");
			
			// 동적인 칼럼 처리
			for(Document document : collection.find()) {
				for(Entry<String, Object> entry : document.entrySet()) {
					String fieldName = entry.getKey();
					Object fieldValue = entry.getValue();
					System.out.println(fieldName + " " + fieldValue);
				}
				System.out.println("--------------------------------");
			}
			System.out.println("건수 : " + collection.countDocuments());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}