21.11.12 MongoDB 1 개념 이론, MongoDB CRUD 해보기

2021. 11. 13. 16:32작업/MongoDB

use 내데이터베이스

db.initialCollection.insertOne({키: 값})

db.initialCollection.find() 

MongoDB와 SQL과 차이점

- 질의 명령어가 SQL이 아니다,

- 정보의 형식을 미리 저장하지 않는다,

- _id 값이 자동저장되었다.

관계형 데이터베이스

안정화에 집중, 범용적

전통적 RDBMS의 규칙:

 - 2차원 테이블형태,

 - SQL을 통한 질의,

 - ACID 원칙을 준수

NOT ONLY SQL : SQL을 사용할 수도 있고 아닐수도 있다.

성능(확장,유연성,고성능,고기능성)에 집중, 각 기능에 특화

그런데 서버에 요구되는 정보 처리량을 증가시키려면 규칙을 깨야한다.

 

 

MongoDB 소개 및 분산 컴퓨팅

많은 양의 정보 처리에는 MongoDB가 좋다. 여러 개의 서버를 돌릴 수 있다.

분산 컴퓨터의 방식 - 복제, 샤딩

- 복제

- 샤딩 1~20 20~40 40~100으로 나누어 저장, 서버 여러대에

 

 

분산 컴퓨팅 MongoDB의 주의점 데이터가 의도치않게 중간 상태로 저장될 수 있다.

(MySQL는 데이터가 항상 저장완료하거나 저장 실패한 상태로만 존재)

 

-> MongoDB는 Write-Concern, Read-Concern 설정을 알아야 한다.

 

JS 친화적 MongoDB

MongoDB의 활용

MongoDB의 특장점

- JS 에 친화적이다

- 성능 확장이 쉽다

- 높은 성능을 낼 수 있다

- 유연한 구조로 저장(자료안에 자료안에 자료..)

- 다양한 자료형을 지원(최근에 사용되는 지도, 타이머.. )

- JS기반 프로젝트, 저장할 정보의 형태가 자주 변경되는 경우, 높은 성능이 필요한 경우에 Good

- 안정성,무결성이 더 중요한 경우, 복잡한 쿼리가 빈번한 경우 Bad

파일럿 프로젝트 : 테스트용 프로젝트. 

MongoDB의 구조

도큐먼트 : BSON 구조

파이썬 모듈 활용해서 이번에는 파이썬으로 접근함

실습 1 몽고DB python파일인 pymongo로 데이터베이스 만들기

데이터베이스 연결 -> 데이터베이스 만들기 -> 데이터 삽입

구조: DB -> collection(table) -> document(row)

 

connection = pymongo.MongoClient #pymongo로 데이터베이스 연결

데이터베이스명 = connection.get_database #데이터베이스 생성

컬렉션명 = 데이터베이스.get_collection('컬렉션명') #컬렉션 생성

컬렉션명.insert_one({키:값, 키:값 ...}) #도큐먼트 데이터 삽입

연결된데이터베이스.list_database_names()

 

insert 전
insert 후

BSON 데이터 타입

MySQL 컬럼 = BSON 필드(field)

null 아무것도 없다

undefined 정의되지 않았다

double,integer

string

object

array

boolean 가능 등이 있고, 

Date와 ObjectId라는 것도 있는데

 

ObjectId MongoDB에서 document들의 primary key로 사용된다.

python pprint 사용 예쁘게 BSON 출력해본다.

 

 

컬렉션변수 = db.get_collection('컬렉션명')

변수 = 컬렉션변수.insert_one(데이터)

변수.inserted_id 하면

실습 4 여러 데이터 삽입

 

도큐먼트 검색 기초

컬렉션. find({쿼리} , {프로젝션})

* 커서 : 쿼리 결과에 대한 포인터

도큐먼트의 위치 정보만을 반환하여 작업을 효율적으로 만듦.

* 쿼리 : 원하는 정보를 걸러내기 위한 깔데기

field에 맞는 value 값으로 필터링한다.

* 프로젝션 : 그 field를 보여줄지 말지를 결정, 단 

한 field내 이렇게 프로젝션 true, false가 섞여있으면 안된다.

실습 4 데이터 검색하기 for문 사용 python

실습 5 pprint와 for문, projection사용해서 데이터 도큐먼트 조회하기

_id 필드를 제외한 books 컬렉션의 모든 도큐먼트를 조회하였다.

쿼리 부분에 아무 필터링 조건이 없다면 그냥 빈 딕셔너리로 {}를 넘길 수 있다.

도큐먼트 수정

컬렉션명.update_many( {"$set":{해당필드명: 값}} )

컬렉션명.update_one( {"$set":{해당필드명: 값}} )

$set, $unset 말고 다른 이런 update 연산자들이 있다.

연산자 : 기능을 가리킴. 이미 지정된

실습 7 데이터 수정하기

실습 8 여러 데이터 수정하기

update내용과 query 내용을 매개변수로 update_many에 넣어준다.

반면 수정할 데이터가 특정 문자열(해리포터)로 시작하는 도큐먼트들이기 때문에 정규표현식을 이용해야 합니다. 정규표현식을 이용하기 위해서는 $regex 연산자를 이용합니다.

도큐먼트 삭제

실습 9 데이터 삭제하기

실습 10 여러 데이터 삭제하기