[DE] MongoDB

박경국·2022년 2월 2일
0

Data Engineering

목록 보기
11/16
post-thumbnail

이번 포스팅에서는 문서형 NoSQL 데이터베이스인 MongoDB를 정리해보겠습니다.

1. MongoDB

MongoDB의 구성요소는 Collections, Documents, Fields입니다.

  • Documents : MongoDB는 데이터를 테이블이 아닌 하나의 문서로 저장합니다. 하나의 문서(도큐먼트)에는 하나의 속성에 대한 데이터가 있습니다. RDB의 record과 유사한 개념입니다. 하나의 도큐먼트에는 하나의 unique id가 자동적으로 부여됩니다. 또한 각 문서들은 정해진 틀이나 데이터 타입이 없습니다. 개별 레코드가 서로 다른 데이터 타입, 열(MongoDB에서는 Fields)을 추가하거나 삭제할 수 있습니다.

  • Collections : 각각의 도큐먼트가 모여 하나의 Collection이 됩니다. RDB가 Table 간의 관계로 특정 데이터를 표현한다면 Collection는 유사한 성질의 도큐먼트가 모이는 장소입니다. 이를테며 User라는 Collection에는 개별 유저에 관한 도큐먼트(UserID, Name, OrderID, Order Counts 등)가 들어있습니다. 반면 RDB에서 User라는 테이블은 User의 속성 중 일부(UserID, Name)만 담을 수 있을 뿐입니다. 유저 별로 Order 정보를 표현하고 싶다면 Order 테이블과 연결지어야 합니다.

  • Fields : 도큐먼트는 json 형태의 {key:values} 쌍으로 이루어져 있습니다. Field는 여기서 key에 해당하는 개념입니다. 도큐먼트 안에서 value를 조회할 때 key를 이용합니다. 앞서 NoSQL을 쿼리할 때 스키마에 따라서 쿼리해야 한다고 말씀드렸는데, json 구조에 따라 key를 배열하여 쿼리해야 한다는 의미였습니다. python에서 dictionary data를 조회할 때를 생각하면 편합니다.

2. How to use MongoDB

MongoDB Atlas로 MongoDB 데이터베이스를 생성한 뒤에 파이썬과 연결하는 과정을 소개합니다.

1) DB API 연결

!pip install pymongo
!pip install dnspython
from pymongo import MongoClient

"""
MongDB SETUP
"""

client = MogoClient(MONGO_URI) #URI는 MongoDB Atlas 클러스터에서 확인할 수 있습니다.
database = client[DATABASE_NAME]
collection = database[COLLECTION_NAME]
  • 먼저 MongoDB Atlas에서 클러스터를 생성한 뒤에 URI 정보를 가져옵니다.
  • URI로 client와 databas, collection을 생성합니다. 데이터 업데이트, 조회 등의 작업은 collection을 중심으로 이뤄집니다.

2) INSERT Datas


#documnet라는 이름의 json 데이터를 하나만 넣을 때
collection.insert_one({document})

#documnetㄴ라는 이름의 json 데이터를 여러개 넣을 때
collection.insert_many({documents})
  • DB에 데이터를 넣을 때는 collection 인스턴스를 활용합니다. 하나를 넣을 때는 insert_one, 하나 이상을 넣을 때는 insert_many를 사용합니다.
  • document의 특정 field만 넣고 싶을 때는 for문을 활용합니다.

for i in data:
    collection.insert_one(i[name])

3) Query Datas

collection.find()
  • DB 내 모든 데이터를 조회할 때는 find() 메소드를 사용합니다.
collection.find( { "key": “value” } )
  • 특정 값만 가지고 오고 싶다면 key:value를 한정지어줍니다.
  • id 필드의 user1에 해당하는 도큐먼트를 조회하고 싶다면 {id : "user1"}을 입력하면 됩니다.
collection.find({id : "user1"}, {name : 1}) 

or


collection.find({id : "user1"}, {_id : 0, name : 1}) 
  • id가 user1인 사람의 name만 가져오는 방법입니다.
  • 고유값인 _id도 함께 조회된다면 _id : 0으로 name만 조회할 수 있습니다.

이밖에도 논리연산자, 비교연산자를 사용하여 데이터를 query할 수 있습니다. 연산자를 사용한 데이터 query는 다른 포스팅에서 다루도록 하겠습니다.

0개의 댓글