MongoDB는 NoSQL 도큐먼트 데이터베이스이다.
도큐먼트 데이터베이스는 데이터를 테이블이 아니라 문서처럼 저장하는 데이터베이스이다.
JSON 유사 형식으로 데이터를 문서화 하고, 각 도큐먼트는 데이터를 필드-값의 형태로 가지고 있으며 컬렉션이라고 하는 그룹으로 묶어서 관리하고 있다.
{
<field> : <value>,
<field> : <value>,
"name" : "Jinny",
"title" : "Practice"
"age" : 30
}
title
이란 필드의 값은 Practice
이다. 이러한 도큐먼트의 모음을 컬렉션이라고 한다.
shell
을 이용하여 도큐먼트를 조회하거나 업데이트 할 때, 도큐먼트는 JSON형식으로 출력된다.
{}
중괄호로 도큐먼트가 시작하고 끝나야 한다.:
)으로 분리되어야 하며, 필드와 값을 포함하는 쌍은 쉼표(,
)로 구분된다.""
)로 감싸야 한다.장점 : 텍스트 형식이라 읽기 쉬움
단점 : 파싱이 느리고 메모리 사용이 비효율적이다. 사용할 수 있는 데이터 타입에 제약이 있다.
컴퓨터의 언어에 가까운 이진법에 기반을 둔 표현이다.
장점 : 메모리 사용이 효율적이며 빠르고, 가볍고, 유연하다. 더 많은 데이터 타입을 사용할 수 있다.
JSON
mongoimport
mongoimport --uri "<Atlas Cluster URI>"
--drop=<filename>.json
mongoexport
mongoexport --uri "<Atlas Cluster URI>"
--collection=<collection name>
--out=<filename>.json
BSON
mongorestore
mongorestore --uri "<Atlas Cluster URI>"
--drop=dump
mongodump
mongodump --uri "<Atlas Cluster URI>"
// "mongodb+srv://<username>:<password>@<cluster>.mongodb.net/database_name"
db.collection.insert(
<document or array of documents>,
{
writeConcern: <document>,
ordered: <boolean>
}
)
Insert
명령어를 사용하면, 주어진 도큐먼트 배열의 인덱스 순서로 작업이 실행된다.
ordered
를 추가하면, 순서에 상관 없이 고유한 _id를 가진 도큐먼트는 모두 컬렉션에 삽입된다.
만약 사용자가 존재하지 않는 컬렉션에 도큐먼트를 넣는 경우, 그와 동시에 컬렉션이 만들어지게 된다.
db.collection.find(<쿼리문>)
find
명령어로 찾은 결과물이 20개 결과물만 출력된다.
다음 20개의 도큐먼트를 조회하기 위해서는 iterate의 줄임말인 it
명령어를 사용한다.
count()
명령어를 find() 뒤에 추가하면 해당 컬렉션 안 모든 데이터의 수가 출력된다.
find()대신 findOne()
명령어를 사용하고 조건을 주면 데이터 1개만 가져올 수 있다.
updateOne
주어진 기준에 맞는 다수의 도큐먼트 중 첫 번째 도큐먼트 하나만 업데이트
db.collection.updateOne(
<filter>,
<update>,
{
upsert: <boolean>,
writeConcern: <document>,
collation: <document>,
arrayFilters: [ <filterdocument1>, ... ],
hint: <document|string> // Available starting in MongoDB 4.2.1
}
)
updateMany
쿼리문과 일치하는 모든 도큐먼트를 업데이트
db.collection.updateMany(
<filter>,
<update>,
{
upsert: <boolean>,
writeConcern: <document>,
collation: <document>,
arrayFilters: [ <filterdocument1>, ... ],
hint: <document|string> // Available starting in MongoDB 4.2.1
}
)
연산자
db.collection.updateMany({"업데이트 할 도큐먼트 결정하는 조건"}, {"$inc" : {"field":10}})
// 연산자 $inc 사용
// 특정한 필드의 값을 주어진 만큼 증가
$inc
연산자는 업데이트 하려는 필드와 증가하는 값을 작성하여 다양한 필드의 값을 동시에 업데이트 할 수 있다. (객체 형태)
db.collection.updateOne({"업데이트할 도큐먼트 결정하는 조건"}, {"$set" : {"field" : 333}})
// 연산자 $set 사용
// 바꾸고 싶은 값을 해당 필드에 작성하여 변경
db.collection.updateOne({"업데이트할 도큐먼트를 결정하는 조건"}, {"$push" : {"field"} : {"추가할 서브 도큐먼트(키:값 형태)"}})
// 연산자 $push 사용
// 추가하고 싶은 도큐먼트 해당 필드에 값인 배열에 추
deleteOne
주어진 기준에 맞는 다수의 도큐먼트 중 첫 번째 도큐먼트 하나를 삭제
db.collection.deleteOne(
<filter>,
{
writeConcern: <document>,
collation: <document>,
hint: <document|string> // Available starting in MongoDB 4.4
}
)
deleteMany
쿼리문과 일치하는 모든 도큐먼트를 삭제
db.collection.deleteMany(
<filter>,
{
writeConcern: <document>,
collation: <document>
}
)
Drop
컬렉션 삭제하는 명령어
db.collection.drop()