
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}}
)