MySQL같은 SQL 데이터베이스와는 다른 유형의 데이터
NoSQL 대표주자인 mongoDB 사용

JOIN : 관계가 있는 테이블 끼리 데이터를 합치는 기능 (몽고디비는 aggregate로 흉내 가능)
데이터 형식이 자유롭기 때문에 빅데이터, 메시징, 세션, 관리 등(비정형 데이터)에는 몽고디비 사용하면 좋음
mysql과 마찬가지로 workbench에서 직접 만드는 것 처럼 mongodb compass에서 직접 만들거나, 볼 수 있음

또는 node 명령어로 사용가능
use 데이터베이스명으로 생성

show dbs 로 목록 확인

db로 현재 사용중인 데이터베이스 확인

따로 생성할 필요 없음
다큐먼트(row)를 넣는 순간 컬렉션도 자동 생성됨
직접 생성하는 명령어도 있음
db.createCollection

show collections로 현재 컬렉션 확인

몽고디비는 컬럼을 정의하지 않아도 됨
nodejs> db.users.insertOne({ name: 'mumu', age: 24, married: false, comment: '안녕하세요. 몽고디비 사용법에 대해 알아봅 시다.', createAt : new Date() });
// 출력
{
acknowledged: true,
insertedId: ObjectId('65829aeaeee29277eabe3cf7')
}
insertId란 mysql의 id 즉 primary key, 고유키 라고 생각하면 됨, 자동으로 만들어짐
허나 다른 점은 ObjectID가 랜덤으로 만들어지는것이 아니라 날짜 정보등을 담고 있어서, 아이디를 기준으로 만들어진 순서 정렬등이 가능하다
nodejs> db.users.insertOne({ name: 'mumu22', age: 27, married: true, comment: '안녕하세요. 두 번째 게시물입니다.', createAt : new Date() });
{
acknowledged: true,
insertedId: ObjectId('65829b6aeee29277eabe3cf8')
}
ObjectID 가 끝자리가 하나가 올라 간 것을 발견
아까 받았던 ObjectID를 통해 직접 관계를 연결해주어야 함
nodejs> db.comments.insertOne({ commenter: ObjectId("65829aeaeee29277eabe3cf7"), comment: '안녕하세요 mumu의 댓글입니다.', createdAt: new Date()});
// 출력
{
acknowledged: true,
insertedId: ObjectId('65829f02eee29277eabe3cf9')
}
위 처럼 comments 테이블의 commenter 이란 컬럼을 users의 Objectid로 연결시켜주면 users와 comments의 로우가 연결이 되며 1대M 관계가 형성됨


mongoDB compass 에서 insert로 직접 JSON 식으로 넣어 입력하는 방법도 있음

다만, MYSQL 같은 경우 foriengy key등을 이용해 검사가 가능한데, mongoDB는 따로 오타 검사를 해주지 않기 때문에, 오타 가 나는지 검사를 잘 해주어야 한다.
nodejs> db.users.findOne()
// 출력
{
_id: ObjectId('65829aeaeee29277eabe3cf7'),
name: 'mumu',
age: 24,
married: false,
comment: '안녕하세요. 몽고디비 사용법에 대해 알아봅시다.',
createAt: ISODate('2023-12-20T07:42:34.751Z')
}
find의 두 번째 인수로, 조회할 필드(컬럼) 들을 선택할 수 있음 (1은 추가, 0은 제외)
nodejs> db.users.find({}, { name: 1, married: 1});
//출력
[
{
_id: ObjectId('65829aeaeee29277eabe3cf7'),
name: 'mumu',
married: false
},
{
_id: ObjectId('65829b6aeee29277eabe3cf8'),
name: 'mumu22',
married: true
}
]
여기서 _id:0 을 추가하면 _id를 제외한 값이 출력이 된다.
첫 번째 인수로 조회 조건 입력 가능
nodejs> db.users.find( { name : 'mumu' } )
// 출력
[
{
_id: ObjectId('65829aeaeee29277eabe3cf7'),
name: 'mumu',
age: 24,
married: false,
comment: '안녕하세요. 몽고디비 사용법에 대해 알아봅시다.',
createAt: ISODate('2023-12-20T07:42:34.751Z')
}
]
nodejs> db.users.find( { age : { $gt : 20 }, married: true }, { _id: 0, name: 1, age: 1} )
// 출력
[ { name: 'mumu22', age: 27 } ]
nodejs> db.users.find( { age : { $gt : 10 }, married: true }, { _id: 0, name: 1, age: 1} ).sort({age: -1})
[ { name: 'mumu22', age: 27 }, { name: 'mumu345', age: 24 } ]
nodejs> db.users.find( { age : { $gt : 10 }, married: true }, { _id: 0, name: 1, age: 1} ).limit(1)
[ { name: 'mumu22', age: 27 } ]
nodejs> db.users.find( { age : { $gt : 10 }, married: true }, { _id: 0, name: 1, age: 1} ).skip(1)
[ { name: 'mumu345', age: 24 } ]
update 메서드로 쿼리
nodejs> db.users.updateOne({name: 'mumu22'}, {$set: { comment: '수정된 내용입니다.!!!'}})
// 출력
{
acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 1,
upsertedCount: 0
}
nodejs> db.users.deleteOne({name: 'mumu22'})