본문 바로가기
DataBase

[DataBase] MongoDB 파헤치기

by 배써니 2024. 3. 7.

MongoDB란?

MongoDB는 NoSQL 데이터베이스의 한 종류로서, 비관계형 데이터를 저장하고 관리하는 데에 사용된다.
여기서 NoSQL는 YesSQL의 반대 의미가 아닌!
Not Only SQL의 줄임말로, SQL만을 사용하지 않는 데이터베이스 관리 시스템(DBMS)을 지칭한다.
즉, 관계형 데이터베이스를 아예 사용하지 않는다는 의미가 아닌 여러 유형의 데이터베이스를 사용한다는 것이다.

 

01. 도큐먼트(Document)
MongoDB는 도큐먼트 지향 데이터베이스이다.
도큐먼트(Document)란, MongoDB의 기본 단위로, 관계형 데이터베이스에서의 '행'의 개념과 유사하다.
이는 JSON 형태의 정렬된 key와 value의 집합으로 이루어져 있는데,
key값은 대소문자를 구분하는 문자열이며 중복이 되어서는 안된다.
올바른 도큐먼트 사용 예시는 아래와 같다.

## 올바른 도큐먼트 예시
{"word" : "Hello, World!", "girls" : 5, "boys" : 7}

## 서로 다른 경우
{"count" : 5} != {"count" : "5"}   #데이터 타입 오류
{"count" : 5} != {"Count" : 5}   #대소문자 오류


필자가 인턴으로 근무하는 회사에서 확인한 몽고DB 데이터 예시는 아래와 같다.

## 실제 데이터의 값과는 무관한, 임의로 변형한 데이터임을 알린다.
	
   { "carNo": "서울12가3456",
      "carLocationInfoId": "car0011223344",
      "parkingYn": "N",
      "lon": 129.0,
      "lat": 35.2,
      "createDate": "202403051712",
      "speed": 4 }


02. 컬렉션(Collection)
도큐먼트에 대해 이해했다면, 다음으로는 '
컬렉션(Collection)'에 대해 이해할 필요가 있다.
컬렉션은 쉽게 말해 도큐먼트의 모음으로, 관계형 데이터베이스에서의 '테이블'과 유사하다고 볼 수 있다.
아래 예시를 보면 컬렉션에 대한 이해가 보다 쉬울 것이다.

왼쪽 메뉴바에 있는 6개의 이름들이 컬렉션에 해당된다.

 

03. 필드(Field)
몽고DB(MongoDB)에서의 "필드"는 도큐먼트(document) 내에 있는 데이터의 키(key) 또는 이름을 의미한다.

## 실제 데이터의 값과는 무관한, 임의로 변형한 데이터임을 알린다.
	
   { "carNo": "서울12가3456",
      "carLocationInfoId": "car0011223344",
      "parkingYn": "N",
      "lon": 129.0,
      "lat": 35.2,
      "createDate": "202403051712",
      "speed": 4 }

위의 도큐먼트 예시로 들었던 데이터에서의 필드는
'carNo', 'carLocationInfoId', 'parkingYn', 'lon', 'lat', 'createDate', 'speed'에 해당되며,
관계형 데이터베이스에서의 '칼럼'과 유사하다.


이렇게 해서 몽고DB 내의 주요 용어를 공부해 보았는데,
기존의 관계형 데이터베이스의 용어와 비교하며 이해한다면 훨씬 받아들이기 쉬울 것이다.
그럼 이제 실제로 MongoDB를 사용해보자.

 

MongoDB Compass 활용하기


MongoDB Compass는 MongoDB를 시각적으로 탐색하고 시각화할 수 있는 공식 GUI 도구이다.
필자는 현재 MongoDB Compass를 통해 MongoDB를 활용하고 있다. 
MongoDB Compass 사용법에 대해 알아보자.

00. MongoDB Compass 설치
MongoDB 공식 홈페이지에서 MongoDB Compass를 설치할 수 있다.


01. MongoDB 서버 연결
MongoDB Compass에 접속하면 MongoDB 서버에 연결할 정보를 입력해야 한다.
호스트, 포트, 사용자 이름, 비밀번호 등을 적절하게 입력하여 서버에 연결되면, 데이터베이스를 탐색할 수 있는 창이 나타난다.

02. 데이터베이스 및 컬렉션 탐색

보안 상의 문제로 실제 데이터는 블러처리 하였다.

위의 사진과 같이, 서버와의 연결이 성공적으로 이루어지면
MongoDB 서버에 저장되어있는 데이터베이스와 컬렉션을 한눈에 확인할 수 있다.
(이제 컬렉션 하나를 선택하면 그 안에 수많은 도큐먼트가 나올 것이다.)

 

03. 데이터 Query

조건에 맞는 데이터를 확인하기 위해서는 데이터 Query문을 작성해야 한다. Query문 작성 방식은 간단하다.
원하는 컬렉션을 선택한 후, "Filter" 버튼을 클릭하여 쿼리를 작성하면 된다.
Query문 기본 문법은 아래에 따로 기재해두었다.

입력 화면은 다음과 같다.

쿼리를 다 입력한 뒤에 "Find"버튼을 클릭하면 조건에 부합하는 결과가 화면에 표시된다.

 


Query문 기본 문법 익히기

MongoDB 쿼리는 JSON 형식의 문서를 사용하여 데이터를 검색하고 조작하는데 사용된다.
아래는 기본적인 MongoDB 쿼리 문법 소개이다.

01. 데이터 검색

db.collection.find( )

조건을 지정해야 할 때에는 db.collection.find({ 조건 })와 같은 형태로 괄호 안에 조건을 지정해주며,
'collection' 자리에는 현재 collection 이름을 기입해주면 된다.
사용 예시 비교 연산자에 대한 설명을 마친 뒤에 보이도록 하겠다.

02. 비교 연산자

<기호> <용도>
$eq 동등
$gt 초과
$gte 이상
$lt 미만
$lte 이하
$ne 부등


03. 정렬
데이터 오름/내림차순은 데이터 정리의 기본이다.
각각의 쿼리문과 활용예시를 아래에 적어두었다.

# 오름차순
db.collection.find().sort({ field: 1 })

# 내림차순
db.collection.find().sort({ field: -1 })

--------------------------------------------
# 활용예시
db.books.find().sort({ publication_year: -1 })

 

 

 

Python으로  사용하기

PyMongo라는 라이브러리를 통해 Python으로 MongoDB를 이용할 수 있다.

01. PyMongo 설치
가장 먼저 PyMongo를 설치해야 하는데, CMD창을 열어 아래의 명령어를 실행하면 PyMongo가 설치된다.

pip install pymongo
# !pip install pymongo

 

02. DB 연결
파이썬과 MongoDB를 연결하는 방법에는 크게 두 가지가 있다.
첫 번째 방법은 PyMongo 라이브러리의 메소드 중 하나인 MongoClient의 파라미터 값으로 MongoDB 서버 URI를 입력하는 것이고,
두 번째 방법은 MongoDB 서버의 호스트와 포트 각각의 값을 파라미터로 입력하는 것이다.

from pymongo import MongoClient

# 방법1 - URI
mongodb_URI = "mongodb://localhost:27017/"
client = MongoClient(mongodb_URI)

# 방법2 - HOST, PORT
client = MongoClient(host='localhost', port=27017)

print(client.list_database_names())

 

03. DB/Collection 접근하기

# DB 접근
db = client.db_name
db = client['db_name']

# Collection 접근
collection = db.col_name
collection = db['col_name']



04. 조건에 맞게 데이터 불러오기

# 모든 도큐먼트 불러옴
cursor = collection.find({})

# 결과를 리스트로 변환 후 데이터프레임으로 저장
df = pd.DataFrame(list(cursor))
df

위와 같은 코드로 진행했더니 데이터가 너무 많아 한참이 걸렸다.
그래서 필자는 우선 상위에 있는 도큐먼트 10개만 불러오는 것으로 코드를 수정해보았다.

# 컬렉션에서 상위 10개의 데이터 가져오기
cursor = collection.find({}).limit(10)

df = pd.DataFrame(list(cursor))
df

 

 

 


'DataBase' 카테고리의 다른 글

[DataBase] PostgreSQL 파헤치기  (0) 2024.03.04