mongosh를 이용해 MongoDB deployment에 연결하고, DB CRUD를 구현해보겠습니다.
MongoDB Shell
MongoDB 서비스를 실행한 후, mongoDB Shell을 사용하겠습니다.
1
| brew services start mongodb-community@6.0
|
이제부터 mongoDB shell로 조작할 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
| Current Mongosh Log ID: ________________________
Connecting to: mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.10.3
Using MongoDB: 6.0.6
Using Mongosh: 1.10.3
For mongosh info see: https://docs.mongodb.com/mongodb-shell/
------
The server generated these startup warnings when booting
2023-08-08T16:39:18.427+09:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
------
test>
|
MongoDB shell 명령어
MongoDB deployment에 MongoDB Shell을 사용해 연결하기
로컬 MongoDB 배포가 실행되어 있거나, MongoDB Atlas(무료 클라우드 호스팅 배포)가 실행되어 있어야 MongoDB Shell을 사용할 수 있습니다.
기본 포트는 27017
입니다.
아래 명령어를 사용해 MongoDB 로컬 배포에 연결할 수 있습니다.
위 명령은 아래 명령과 동일합니다.
1
| mongosh 'mongodb://localhost:27017'
|
다른 포트로 연결하기 (로컬)
두 명령은 같습니다.
1
| mongosh "mongodb://localhost:28015"
|
원격 호스트의 deployment에 연결하기
1
| mongosh "mongodb://mongodb0.example.com:28015"
|
1
| mongosh --host mongodb0.example.com --port 28015
|
--port
를 생략하면 기본 포트 27017
로 연결합니다.
인증 연결하기
authentication을 요구하는 MongoDB deployment에 연결하려면 --username
, --authenticationDatabase
옵션을 사용합니다.
admin
DB의 유저명 alice
로 인증하려면 아래와 같이 사용합니다.
1
| mongosh "mongodb://mongodb0.example.com:28015" --username alice --authenticationDatabase admin
|
암호를 제공하려면 --password
옵션을 사용합니다.
에디터로 명령어 입력하기
edit
을 이용해 외부 에디터를 사용합니다..editor
를 이용해 내장 에디터를 사용합니다.
저는 아래 명령어로 외부 에디터 vi를 연결했습니다.
1
| config.set('editor', 'vi')
|
DB
존재하는 DB 조회
1
2
| show databases
show dbs
|
현재 사용중인 DB 조회
특정 DB 사용, 생성
db_name이라는 이름의 데이터베이스를 사용합니다. 없다면 생성하고 해당 DB로 전환합니다.
DB 내 collection이 하나도 없다면, show dbs
에 표시되지 않습니다.
현재 사용중인 DB 삭제
Collection
collection 조회
collection 생성
1
| db.createCollection('collection_name')
|
collection을 생성합니다. 이미 존재한다면 에러가 발생합니다.
collection 삭제
Document
collection 내 모든 document 조회
특정 document 조회
1
| db.collection.find([query], [projection])
|
query
: document 조회 기준으로, document 타입입니다.projection
: document 조회시 보일 field 지정합니다. document 타입입니다.
단일 document 삽입
1
| db.collection.insertOne([document])
|
document에 _id
필드를 지정하지 않으면 MongoDB가 ObjectId
값이 있는 필드를 새 document에 추가합니다.
다중 document 삽입
1
| db.collection.insertMany([document_list])
|
단일 document 수정
1
| db.collection.updateOne([filter], [update], [options])
|
filter
: 수정 적용 대상으로, document 타입입니다.update
: 수정할 내용으로, document 타입입니다.options
: 적용 옵션으로, document 타입입니다.
다중 document 수정
1
| db.collection.updateMany([filter], [update], [options])
|
단일 document 대체
1
| db.collection.replaceOne([filter], [update], [option])
|
필드를 업데이트하거나 추가할 수 있는 replaceOne()
과는 다르게, 해당 document 전체를 대체합니다.
업데이트할 새 document에 포함되지 않은 이전 document의 필드는 손실됩니다.
단일 document 삭제
1
| db.collection.deleteOne([filter])
|
다중 document 삭제
1
| db.collection.deleteMany([filter])
|
Query Operators
$eq
: 지정된 값과 같은 값$ne
: 지정된 값과 같지 않은 값$gt
: 지정된 값보다 큰 값$gte
: 지정된 값보다 크거나 작은 값$lt
: 지정된 값보다 작은 값$lte
: 지정된 값보다 작거나 같은 값$in
: 배열에 속하는 값$nin
: 배열에 속하지 않은 값
Logical Operators
$and
: 두 절의 조건과 일치하는 모든 document 반환$not
: 조건과 일치하지 않는 document 반환$or
: 두 절의 조건 중 하나라도 일치하는 document 반환$nor
: 두 절의 조건과 모두 일치하지 않는 document 반환
예시
등급이 PG이거나 PG-13인 모든 영화들을 sample_mflix.movies
에서 가져오겠습니다.
1
2
| use sample_mflix
db.movies.find( { rated: { $in: [ 'PG', 'PG-13' ] } } )
|
멕시코에서 개봉했고 IMDB 평가가 7이상인 모든 영화들을 가져오겠습니다.
1
2
| use sample_mflix
db.movies.find( { countries: 'Mexico', 'imdb.rating': { $gte: 7 } } )
|
2010년에 개봉했고, 최소 5개의 상을 수상했거나 장르가 드라마인 모든 영화들을 가져오겠습니다.
1
2
3
4
5
| use sample_mflix
db.movies.find( {
year: 2010,
$or: [ { 'awards.wins': { $gte: 5 } }, { genres: 'Drama' } ]
} )
|
참고
MongoDB Shell