MongoDB는 크로스 플랫폼 도큐먼트 지향 데이터베이스 시스템으로, NoSQL 데이터베이스로 분류된다.
위키백과
Not Only SQL, MySQL
과 같은 관계형 데이터베이스를 사용하지 않음을 의미한다.
장점
(SNS 시스템에 유리)
Schema
를 고정하지 않는 형태로, 데이터 구조를 미리 정의할 필요가 없다. (Schema-less)
join
문법을 사용할 일이 없다.단점
정리
join
문법이 필요할 경우엔 관계형 데이터베이스를 사용하는 것이 좋다.NoSQL
의 사용을 권장한다.XML
, JSON
유사 형식의 문서로 데이터 저장에 특화된 데이터베이스 구조를 의미한다.(관계형 데이터베이스와 대조)
Key - Value
의 형태로 저장된다. {
"_id" : ObjectId("624c54982f2d9382bb11bb53"),
"user_id" : "bcd001",
"age" : 45.0,
"status" : "B"
}
show dbs
: 현재 데이터베이스 목록 확인use 데이터베이스명
: 사용 데이터베이스 선택db.dropDatabase()
: 데이터베이스 삭제save()
, insert()
, insertOne()
, insertMany()
find()
updateOne()
, updateMany()
remove()
, deleteOne()
, deleteMany()
$eq
: 조건과 일치하는 값$ne
: 조건과 일치하지 않는 값$gt
: 조건보다 큰 값 $gte
: 조건보다 같거나 큰 값 { age : { $gte : 20 }}
$lt
: 조건보다 작은 값 {age : {$lt : 30}}
$lte
: 조건보다 작거나 같은 값$in
: 조건으로 부여된 배열 안에 속하는 값 {age : { $in : [5, 15]}}
$nin
: 조건으로 부여된 배열 안에 속하지 않는 값$and
: 부여된 모든 조건을 만족하는 경우 true
리턴$or
: 부여된 조건 중 하나라도 만족하면 true
리턴 { $or : [{age : 25}, {age : 50}] }
$not
: 부여된 조건이 true
일 땐 false
, false
라면 true
리턴// people 컬렉션이 없다면 데이터를 넣으며 생성
db.users.insert ([
{ name : "Abet", age : 19},
{ name : "Betty", age : 20},
{ name : "Charlie", age : 23, skills : ["mongodb", "nodejs"]},
{ name : "David", age : 23, score : 20}
]);
db.users.find(
{ age : { $gte : 20 }}, // 나이가 20이상인(Greater than Equal)
{ name : 1, _id : 0} // name 만 출력하겠다!
// {name : 1, _id : 0, age : 1} -> 나이도 출력하겠다!
).limit(5);
// 명시하여 컬렉션 생성
db.createCollection("users");
// CREATE, READ
db.people.insertMany(
[
{subject : "coffee", author : "xyz", views : 50},
{subject : "Coffe Shopping", author : "efg", views : 10},
{subject : "Baking a Coffe", author : "abc", views : 20}
]
)
// SELECT * FROM PEOPLE
db.people.find()
// SELECT * _id, user_id, status
db.people.find(
{}, // 모든 필드임을 의미
{_id : 1, user_id : 1, status : 1} // _id의 경우 0을 명시해주어야 안보임
)
// SELECT * FROM people WHERE status = "A"
db.people.find ({status : "A"})
// SELECT * FROM people WHERE status = "A" AND age = 50
db.people.find ({status : "A", age : 50})
// SELECT * FROM people WHERE status = "A" OR age = 50
db.people.find ({ $or:[{status : "A"}, {age : 50}]}) // 대괄호 필수
// SELECT * FROM people WHERE age > 25
db.people.find ({age : {$gt : 25}})
// SELECT * FROM people WHERE age < 25
db.people.find ({age : {$lt : 25}})
// SELECT * FROM people WHERE age > 25 AND age <= 50
db.people.find(
{age : { $gt : 25 }, age : { $lte : 50 }}
)
db.people.find(
{age : { $in : [25, 50]}}
// in : 들어간거
// nin : 안 들어간거
)
// SELECT * FROM people WHERE age = 5 OR age = 15
db.people.find(
{ $or : [{age : 5}, {age : 15}] }
)
// SELECT * FROM people WHERE user_id like "%bc%"
db.people.find( { user_id : /bc/ } );
// SELECT * FROM people WHERE user_id like "bc%"
db.people.find( { user_id : /^bc/ } ); // bc로 시작하는 것
// SELECT * FROM people WHERE status = "A" ORDER BY user_id ASC
db.people.find( { status : "A"}).sort({user_id : 1}) // 오름차순
// SELECT * FROM people WHERE status = "A" ORDER BY user_id DESC
db.people.find( { status : "A"}).sort({user_id : -1}) // 내림차순
// SELECT COUNT(*) FROM people
db.people.count()
// SELECT COUNT(user_id) FROM people
db.people.count( { user_id : { $exists : true }})
// SELECT DISTINCT(status) FROM people
db.people.distinct("status") // status 결과만 출력(중복 제거))
// Update, Delete
// UPDATE people SET status = "A" WHERE age > 22
db.people.updateMany(
{age : {$gt : 22}},
{ $set : {status : "A"}}
)
// UPDATE people SET age = age + 3 WHERE status > "A"
db.people.updateMany(
{status : "A"},
{ $inc : {age : 3}}
)
// DELETE FROM people WHERE status = "pending"
db.people.deleteMany( { status : "pending" })
// DELETE FROM people
db.people.deleteMany( {})
// 1. employees Collection 생성
db.createCollection("employees")
// 2. 다음 Document 데이터 넣기
db.employees.insert(
[
{user_id : "bcd001", age : 45, status : "A"},
{user_id : "bcd002", age : 25, status : "B"},
{user_id : "bcd003", age : 50, status : "A"},
{user_id : "bcd004", age : 35, status : "A"},
{user_id : "abc001", age : 28, status : "B"}
]
)
)
// 3. 다음 문법을 작성하시오.
// 3-1. user_id가 bcd002인 Document의 user_id, age, statuts, _id 출력
db.employees.find(
{user_id : "bcd002"},
{user_id : 1, age : 1, status : 1, _id : 1}
)
// 3-2. user_id가 bcd004 이거나, age가 28인 Document의 모든 필드 출력
db.employees.find(
{ $or : [ {user_id : "bcd004"}, {age : 28} ] }
)
// 3-4. age가 30보다 큰 Document의 user_id, age, _id 출력하기
db.employees.find(
{ age : {$gt : 30}}
)
// 3-5. age가 50이고 status가 A인 Document의 user_id만 출력하기
db.employees.find(
{ age : 50, status : "A" },
{ user_id : 1}
)
// 3-6. user_id 종류 출력하기
db.employees.distinct("user_id")
// 3-7. user_id가 bcd로 시작하는 전체 Document 출력하기
db.employees.find(
{ user_id : /^bcd/ }
)
// 3-8. user_id가 cd 문자를 포함하는 전체 Document 출력하기
db.employees.find(
{ user_id : /cd/ }
)
// 3-9. age가 40보다 큰 Document의 status를 B로 변환하기
db.employees.updateMany(
{ age : {$gt : 40}},
{ $set : {status : "B"}}
);
// 3-10. age가 30보다 작은 Document 삭제하기
db.employees.deleteMany(
{age : {$lt : 30}}
)