MongoDB
MongoDB는 관계형 데이터베이스가 아닌 필드와 값 쌍으로 구성된 데이터 구조인 문서입니다.
문서의 구조는 JSON과 유사하며, 필드 값에는 다른 문서, 배열 및 문서 배열이 포함될 수 있습니다.
데이터베이스
MongoDB에서 데이터베이스는 하나 이상의 문서 컬렉션을 보유합니다.
데이터베이스 사용
데이터베이스 생성
MongoDB에서는 데이터를 처음 저장할 때 데이터베이스가 생성됩니다.
따라서 아래와 같이 데이터베이스를 생성할 수 있습니다.
컬렉션
컬렉션은 관계형 데이터베이스의 테이블과 유사합니다.
컬렉션 생성
컬렉션도 데이터베이스와 마찬가지로 데이터를 처음 저장할 때 생성됩니다.
문서
MongoDB는 데이터를 BSON 문서로 저장합니다. JSON의 바이너리 표현이지만 JSON보다 더 많은 데이터 유형을 포함합니다.
문서 구조
문서는 필드-값으로 구성되며 아래와 같은 구조를 갖습니다.
필드의 값은 배열, 문서 배열 또는 문자열을 포함하여 모드 BSON의 데이터 유형이 될 수 있습니다.
_id
: ObjectIdname
: first, last 필드가 포함된 문서birth, death
: Date형식contribs
: 문자열 배열views
: NumberLong형식의 값
필드 이름
필드의 이름은 문자열로 구성되어있습니다.
필드 이름은 제한이 존재합니다.
_id
는 프라이머리 키로 사용되기 때문에 컬렌션에 고유적으로 존재하며, 수정이 불가능합니다.null
문자를 포함할 수 없습니다..
,$
의 사용이 가능합니다.
점 표기법
MongoDB는 .
을 사용하여 배열의 값을 가져올 수 있습니다.
배열
값.인덱스 방식으로 배열의 요소에 접근할 수 있습니다.
다음과 같은 필드가 존재한다고 가정하겠습니다.
아래 코드는 점 표기법을 통해서 데이터를 조회하는 코드입니다.
만일 필드 안에 문서가 지정되어있을 땐 다음과 같이 사용할 수 있습니다.
다음과 같은 필드가 존재한다고 가정하겠습니다.
아래 코드는 점 표기법을 통해서 데이터를 조회하는 코드입니다.
문서 삽입
단일 문서 삽입
여러 문서 삽입
문서 조회
모든 문서 조회
inventory 컬렉션의 모든 문서를 조회합니다.
문서 조건 조회
inventory 컬렌션의 status 필드 값이 “D” 인 모든 문서를 조회합니다.
쿼리 연산자를 사용하여 조회
inventory 컬렌션의 status 필드의 값에 “A” 또는 “D” 인 모든 문서를 조회합니다.
💡 $or
연산자를 사용할 수 있지만 동일한 필드에서 동등성 검사를 수행할 때에는 $in
연산자를 사용합니다.
AND 조건 지정 조회
inventory 컬렉션의 status 필드의 값이 “A”이고, qty 필드의 값이 30보다 작은 모든 문서를 조회합니다.
OR 조건 지정 조회
inventory 컬렉션의 status 필드의 값이 “A” 이거나, qty 필드의 값이 30보다 작은 모든 문서를 조회합니다.
AND, OR 조건 지정 조회
inventory 컬렉션의 status 필드의 값이 “A”이면서, qty 필드 값이 30보다 적거나, item 필드 값의 이름이 p로 시작하는 모든 문서를 조회합니다.
배열 조회
inventory 컬렉션의 tags 필드 배열 값이 “red”, “blank” 순서로 되어 있는 모든 문서를 조회합니다.
순서에 상관없이 조회 시 $all
를 사용할 수 있습니다.
여러 기준을 충족하는 배열 요소 조회하기
$elemMatch
연산자를 사용하면 배열 요소에 여러 기준을 지정합니다.
inventory 컬렉션의 dim_cm 필드의 배열 값이 22 보다 크고 33보다 작은 값이 하나 이상 포함되어 있는 문서를 조회합니다.
지정된 필드만 반환
inventory 컬렉션의 status 필드의 값이 “A”인 문서들의 item, ststus 요소만 반환합니다.
지정된 필드를 제외하고 반환
inventory 컬렉션의 status 필드의 값이 “A”인 문서들의 item, ststus 요소를 제외한 모든 필드 반환합니다.
문서 수정
단일 문서 수정
item 필드의 값이 “paper”인 하나의 문서를 $set
연산자를 이용하여 size필드의 uom필드의 값을 “cm”으로 변경하고, status 필드값을 “P”로 변경합니다. $currentDate
연산자를 이용하여 lastModified 필드의 값을 현재 날짜로 변경합니다.
여러 문서 수정
qty 필드의 값이 50보다 작은 모든 문서를 $set
연산자를 이용하여 size필드의 uom필드의 값을 “in”으로 변경하고, status 필드값을 “P”로 변경합니다. $currentDate
연산자를 이용하여 lastModified 필드의 값을 현재 날짜로 변경합니다.
문서 교체
문서 삭제
모든 문서 삭제
조건과 일치하는 모든 문서 삭제
inventory 컬렉션의 status 필드의 값이 “A”인 모든 문서를 삭제합니다.
조건과 일치하는 단일 문서 삭제
inventory 컬렉션의 status 필드의 값이 “D”인 하나의 문서를 삭제합니다.
연산자
비교 연산자
$eq
: 지정된 값과 같은 값을 일치시킵니다.$gt
: 지정된 값보다 큰 값을 일치시킵니다.$gte
: 지정된 값보다 크거나 같은 값을 찾습니다.$in
: 배열에 지정된 값과 일치시킵니다.$lt
: 지정된 값보다 작은 값을 일치시킵니다.$lte
: 지정된 값보다 작거나 같은 값을 찾습니다.$ne
: 지정된 값과 같지 않은 모든 값을 찾습니다.$nin
: 배열에 지정된 값 중 어느 것과도 일치하지 않습니다.
논리 연산자
$and
: 논리적AND
사용하여 쿼리 절을 조인하면 두 절의 조건과 일치하는 모든 문서를 반환합니다.$not
: 쿼리 표현식의 효과를 반전시키고 쿼리 표현식과 일치하지 않는 문서를 반환합니다.$nor
: 논리적NOR
사용하여 쿼리 절을 조인하면 두 절과 일치하지 않는 모든 문서를 반환합니다.$or
: 논리적OR
사용하여 쿼리 절을 조인하면 두 절의 조건과 일치하는 모든 문서를 반환합니다.
요소 연산자
$exists
: 지정된 필드가 있는 문서와 일치시킵니다.$type
: 필드가 지정된 유형인 경우 문서를 선택합니다.