MongoDB 설치 및 명령어 정리하기
MongoDB 설치 및 명령어 정리하기
MongoDB 설치 및 명령어 정리
MongoDB(몽고디비)는 NoSQL 데이터베이스 시스템의 하나로, 문서 지향(Document-Oriented) 데이터베이스입니다. 이것은 데이터를 BSON(Binary JSON) 형식의 문서로 저장하며, 이러한 문서는 키-값 쌍(key-value pairs)으로 이루어져 있습니다. MongoDB는 관계형 데이터베이스와는 달리 스키마가 정의되지 않아 유연성이 높고, 데이터 모델의 변화에 적응하기 쉽습니다.
SQL의 database, table, row를 mongoDB의 구조와 비교해서 테이블로 표시합니다.
MongoDB | SQL |
---|---|
Database | Database |
Collection | Table |
Document | Row |
Collection : MongoDB에서는 문서의 그룹을 컬랙션이라고 부르며 논리적으로 그룹화하는 방법입니다.
Document : MongoDB는 데이터를 문서로 저장합니다. 문서에는 필드 및 값의 쌍으로 구성되며 중첩되는 구조를 갖을 수 있습니다.
mongoDB를 설치한 후 mongosh
명령을 실행하면 mongoDB 쉘에 접속할 수 있습니다. 버전에 따라서 mongo
명령을 사용합니다.
MongoDB 도커로 설치하기
mongo DB를 docker로 설치하는 방법을 정리합니다. 도커를 사용하여 DB를 설치하면 쉽게 DB를 연습할 수 있습니다.
sudo service docker start
sudo service docker status
docker pull mongo
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mongo latest ee3b4d1239f1 5 weeks ago 748MB
hello-world latest 9c7a54a9a43c 6 months ago 13.3kB
wsl로 docker를 사용할 때 docker가 정상적으로 실행되지 않는 경우 WSL에 docker설치를 확인하세요.
docker-compose를 이용하여 mongodb를 사용할 수 있습니다. mongo db 이미지의 버전정보는 몽고DB 도커사이트에서 확인할 수 있습니다.
version: "3"
services:
mongo-db:
image: mongo
container_name: mongo-db
restart: always
ports:
- 27017:27017
volumes:
- ./data:/data
environment:
- MONGO_INITDB_ROOT_USERNAME=DB admin 유저명>
- MONGO_INITDB_ROOT_PASSWORD=DB admin 암호>
mongoexpress:
image: mongo-express
container_name: mongo-express
restart: always
depends_on:
- mongo-db
ports:
- 8081:8081
environment:
- ME_CONFIG_MONGODB_ADMINUSERNAME=<DB admin 유저명>
- ME_CONFIG_MONGODB_ADMINPASSWORD=<DB admin 암호
- ME_CONFIG_MONGODB_SERVER=mongo-db
- ME_CONFIG_BASICAUTH_USERNAME=<mongo express 유저명>
- ME_CONFIG_BASICAUTH_PASSWORD=<mongo express 암호>
이제 0.0.0.0:8081로 접속해서 유저명과 암호를 입력하면 mongo express를 통해서 mongo db 정보를 확인할 수 있습니다.
MongoDB의 명령어 정리
Mongo DB에서 자주 사용하는 명령어를 정리합니다.
Auth정보로 MongoDB 접속하기
Mongo DB에 admin을 위한 id, password를 설정했다면 해당 정보를 이용하여 DB에 접속해야 합니다.
mongo admin -u username -p 'password'
Database 확인하기
test> show dbs
admin 40.00 KiB
config 60.00 KiB
local 40.00 KiB
Database 만들기 / 확인하기
DB를 생성해도 data가 없는 경우 데이터베이스가 표시되지 않습니다.
test> use testdb
switched to db testdb
testdb> show dbs
admin 40.00 KiB
config 60.00 KiB
local 40.00 KiB
Database 상태 확인하기
정보를 확인할 db를 use
명령으로 결정하고 stats
명령을 db의 상세 정보를 확인할 수 있습니다.
testdb> use admin
switched to db admin
admin> db.stats()
{
db: 'admin',
collections: Long("1"),
views: Long("0"),
objects: Long("1"),
avgObjSize: 59,
dataSize: 59,
storageSize: 20480,
indexes: Long("1"),
indexSize: 20480,
totalSize: 40960,
scaleFactor: Long("1"),
fsUsedSize: 57764601856,
fsTotalSize: 1081101176832,
ok: 1
}
Database에 collection 만들기
testdb
에 collection을 생성하는 명령을 정리합니다.
admin> use testdb
switched to db testdb
testdb> db.createCollection("mydoc")
{ ok: 1 }
testdb> show collections
mydoc
Database에 document 만들기
collection 이름을 사용하여 단일 문서 삽입 시 insertOne
명령을 사용합니다.
testdb> show collections
mydoc
testdb> db.mydoc.insertOne({name: "john", age:30})
{
acknowledged: true,
insertedId: ObjectId("655228d0dc1f13e70f4fcc12")
}
여러문서를 한 번에 삽입하려면 insertMany
메서드를 사용합니다. 데이터는 리스트로 전달합니다.
testdb> db.mydoc.insertMany([{name: "mike", age:10}, {name: "tony", age:51}])
{
acknowledged: true,
insertedIds: {
'0': ObjectId("65522a45dc1f13e70f4fcc13"),
'1': ObjectId("65522a45dc1f13e70f4fcc14")
}
}
Database에 문서 조회
MongoDB에서 데이터를 확인하고 검색하기 위해서는 find 명령어나 그와 유사한 메서드를 사용합니다. MongoDB의 셸에서 데이터를 확인하는 기본적인 방법은 다음과 같습니다.
# 모든 문서 조회
testdb> db.mydoc.find()
[
("655228d0dc1f13e70f4fcc12"), name: 'john', age: 30 },
{ _id: ObjectId{ _id: ObjectId("65522a45dc1f13e70f4fcc13"), name: 'mike', age: 10 },
{ _id: ObjectId("65522a45dc1f13e70f4fcc14"), name: 'tony', age: 51 }
]
# 조건에 따른 문서조회
testdb> db.mydoc.find({ name: 'john' })
[
("655228d0dc1f13e70f4fcc12"), name: 'john', age: 30 }
{ _id: ObjectId]
# 정렬을 사용한 결과정렬
# age를 오름차순으로 정렬합니다.
testdb> db.mydoc.find().sort({ age: 1})
[
("65522a45dc1f13e70f4fcc13"), name: 'mike', age: 10 },
{ _id: ObjectId{ _id: ObjectId("655228d0dc1f13e70f4fcc12"), name: 'john', age: 30 },
{ _id: ObjectId("65522a45dc1f13e70f4fcc14"), name: 'tony', age: 51 }
]
# 제한된 수의 데이터만 출력합니다.
testdb> db.mydoc.find().limit(2)
[
("655228d0dc1f13e70f4fcc12"), name: 'john', age: 30 },
{ _id: ObjectId{ _id: ObjectId("65522a45dc1f13e70f4fcc13"), name: 'mike', age: 10 }
]
Database에 문서 삭제
문서를 삭제하기 위해서 deleteOne
, deleteMany
명령을 사용할 수 있습니다.
testdb> db.mydoc.find()
[
("655228d0dc1f13e70f4fcc12"), name: 'john', age: 30 },
{ _id: ObjectId{ _id: ObjectId("65522a45dc1f13e70f4fcc13"), name: 'mike', age: 10 },
{ _id: ObjectId("65522a45dc1f13e70f4fcc14"), name: 'tony', age: 51 },
{ _id: ObjectId("65522be8dc1f13e70f4fcc15"), name: 'mike', age: 12 }
]
testdb> db.mydoc.deleteOne({name: "mike"})
{ acknowledged: true, deletedCount: 1 }
testdb> db.mydoc.find()
[
("655228d0dc1f13e70f4fcc12"), name: 'john', age: 30 },
{ _id: ObjectId{ _id: ObjectId("65522a45dc1f13e70f4fcc14"), name: 'tony', age: 51 },
{ _id: ObjectId("65522be8dc1f13e70f4fcc15"), name: 'mike', age: 12 }
]
deleteMany
명령은 조건에 맞는 모든 데이터를 삭제합니다. 테스트를 위해서 동일한 나이를 갖는 데이터를 만듭니다.
testdb> db.mydoc.find()
[
("655228d0dc1f13e70f4fcc12"), name: 'john', age: 30 },
{ _id: ObjectId{ _id: ObjectId("65522a45dc1f13e70f4fcc14"), name: 'tony', age: 51 },
{ _id: ObjectId("65522be8dc1f13e70f4fcc15"), name: 'mike', age: 12 },
{ _id: ObjectId("65522dfadc1f13e70f4fcc16"), name: 'a', age: 15 },
{ _id: ObjectId("65522dfedc1f13e70f4fcc17"), name: 'b', age: 15 },
{ _id: ObjectId("65522e01dc1f13e70f4fcc18"), name: 'c', age: 15 },
{ _id: ObjectId("65522e04dc1f13e70f4fcc19"), name: 'd', age: 15 }
]
testdb> db.mydoc.deleteMany({age: 15})
{ acknowledged: true, deletedCount: 4 }
testdb> db.mydoc.find()
[
("655228d0dc1f13e70f4fcc12"), name: 'john', age: 30 },
{ _id: ObjectId{ _id: ObjectId("65522a45dc1f13e70f4fcc14"), name: 'tony', age: 51 },
{ _id: ObjectId("65522be8dc1f13e70f4fcc15"), name: 'mike', age: 12 }
]
deleteMany
명령을 사용해서 age가 15
인 document 4개가 모두 삭제되었습니다.
특정 Key정보만 출력하기
DB에서 query로 탐색한 정보 중 특정 key정보만 출력하고 싶은 경우 사용합니다. 선택한 collection
의 전체 document 중 date
키 정보만 출력됩니다.
db.test_collection.find({}, {'date':1})
References
- https://www.mongodb.com/docs/manual/reference/operator/query/
- https://jhleeeme.github.io/mongodb-collection-find/