MongoDB는 가장 유명한 NoSQL DBMS(Not Only SQL/Database Management System: 전통적인 관계형 데이터베이스보다 덜 제한적인 일관성 모델을 제공하는 DB)이다. 기존 RDBMS(MySQL, ORACLE, PostgreSQL)가 일관성 모델 때문에 가질 수 없었던 확장성, 유연성, 고성능, 고기능성을 확보할 수 있는 특징을 가졌다. 과거에는 하나의 DBMS로 처리하는 상황이 빈번하였지만, 요즘은 처리할 데이터양이 많아서 분산 컴퓨팅이 빈번하다. 그렇기 떄문에 현대적 설계로 고성능을 내면서 동시에 많은 기능과 안정화가 이루어진 NoSQL을 선호한다.
MongoDB에서 지원하는 분산 컴퓨팅 방법
복제: 복사하여 저장하는 방식
안정성을 높이기 위한 방식. 원본 서버가 망가져도 정상 서비스 가능
샤딩: 나누어 저장하는 방식
성능을 향상하기 위한 방식. 읽기, 쓰기 성능 향상 가능
출처:https://coding-start.tistory.com/273
MongoDB는 NoSQL이지만, 다른 RDBMS와 같이 CRUD(C:Create(생성),R:Read(조회),U:Update(갱신), D:Delete(삭제))를 제공한다.
pymongo는 mongoDB를 사용할 수 있게 도와주는 파이썬 모듈이다.
import pymongo
connection = pymongo.MongoClient("mongodb://localhost:27017/")
#localhost는 본인 pc내부를 뜻하며, 27017은 MongoDB기본 포트이다.
db = connection.get_database("testDB")
#접속할 데이터베이스로 접근, 만약 해당 데이터베이스가 없으면 자동으로 생성한 후 접속
collection = db.get_collection("testCollection")
#컬렉션에 도큐먼트 저장, 만약 컬렉션이 없다면 자동으로 생성됨
Create는 새로운 documents를 collection에 생성하거나 추가하는 동작이다. MongoDB에서는 insert를 통해서 이루어진다. 만약 collection이 존재하지 않는다면 새로 생성한다.
import pymongo
connection = pymongo.MongoClient("mongodb://localhost:27017/")
db = connection.get_database("testDB")
collection = db.get_collection("testCollection")
하나의 도큐먼트 삽입
result1 = collection.insert_one({document})
여러개 도규먼튼 삽입
result2 = collection.insert_many([{document}, {document}, ...])
print(result1.inserted_id) #입력된 도큐먼트의 id값 출력
print(result2.inserted_id)
전체 document를 조회하거나, 조건을 입력하여 데이터를 조회한다.
import pymongo
connection = pymongo.MongoClient("mongodb://localhost:27017/")
db = connection.get_database("testDB")
collection = db.get_collection("testCollection")
result1 = collection.find() #전체 document 조회 find를 통해 조회를 할 수 있다.
result2 = collection.find({"필드명": "값"}) #특정 필드명이 값인 경우를 찾고 싶을 때
print(list(result1)) #MongoDB는 cursor값을 출력하기 때문에 값을 보고 싶으면 list형식으로 출력해야한다.
#특정 필드만 조회하거나 제외하고 싶을 경우
projection = {"필드명": True} #특정 필드만 출력
projection = {"필드명": False} #특정 필드를 제외하고 출력
#동시에 한 필드는 True를 또 다른 필드를 False로 했을 경우 Error발생
#이유는 논리적으로 안맞기 떄문
Update는 collection의 documents를 수정하기 위한 동작이다.
import pymongo
connection = pymongo.MongoClient("mongodb://localhost:27017/")
db = connection.get_database("testDB")
collection = db.get_collection("testCollection")
result = collecton.update_many(
{query}, #어떤 document를 바꿀지 조건 거는 것
{update}, #ex) {"$set": {"필드명" : "변경할 값"} $set은 값을 바꾸는 기능을 가진 연산자이다. 여러가지 연산자가 있으니 필요에 맞게 찾아 쓸 것
upsert: Boolean #True인 경우 해당되는 document가 없다면 새로 추가하기, False인 경우 추가하지않기
Delete는 collection의 documents를 삭제하는 동작이다.
Create와 비슷하게 하나(collection.delete_one) 또는 많은(collection.delete_many) document를 삭제할 수 있다.
import pymongo
connection = pymongo.MongoClient("mongodb://localhost:27017/")
db = connection.get_database("testDB")
collection = db.get_collection("testCollection")
result = collection.delete_many(
{query} #어떤 document를 삭제할지 조건을 거는 것
)
https://www.mongodb.com/ko-kr/what-is-mongodb - MongoDB는 무엇입니까?
https://aws.amazon.com/ko/nosql/ - NoSQL 데이터베이스를 사용해야 하는 이유
https://coding-start.tistory.com/273 - DB-MongoDB란?
https://junghwanta.tistory.com/30 - MongoDB CRUD사용(입력,조회,수정,삭제)