자유로운 데이터, JOIN불가(include), 확장성, 컬렉션=테이블 다큐먼트=로우 필드=칼럼
mysql join, sequelize include, 몽고디비 aggregate로 흉내 가능함.
메세지, 세션등 여러 비정형 데이터
ME(RorV)N stack이 웹 서비스를 모두 JS로 처리하는 것도 가능함.
mysql, post, oracle같은 것들로 실무는 데이터 관리를 많이 함.
mongod 를 실행한 상태로 해야 됨. 안 하면 db 꺼짐
mongo.exe가 몽고 쉘
mongo.exe 실행 상태에서
mongo admin -u root -p 1234 root가 계정명, 1234가 패스워드가 된다. 이런 방식으로
접속하는 방법
mongo 안에 objectId안에 날짜가 있어서 시간 순으로 자연스럽게 처리가 됨
_id, ObjectId 임
mongoDB는 find, findOne으로 전체, 1개 처리 됨
offset 이 skip 임.
update 에 {$set:{comment:'안녕하세요'}} 로 무조건 $set을 해야됨. 아니면 전체가 다 날아감.
몽고 DB는 몽구스를 씀 몽고디비에 없는 기능을 몽구스가 보완해 줌.
테이블, join, set빼먹은 것들을 한 번씩 다 바꿔줌. sql같은 것들과 비슷한 느낌으로 사용 가능함.
Mysql 은 Sequelize를 썼던 것과 같음.
sequelize의 model이
mongoose 의 schemas
몽구스를 쓰면 Schema가 생김. sql의 형식으로 작성해서 관계 연결을 해주는
몽고디비와 sql의 중간 단계가 됨
int32가 아니라 JSON형식 JS 가 되야됨.
몽구스도 _id 가 생략 가능함
const {Schema}=mongoose;
const {Types:{ObjectId}}=Schema;
//위의 과정으로 타입 추출이 먼저
commenter:{
type:ObjectId,
required:true,
ref:'User',
}
{
_id:12341234,
//commenter:~~의 objectId, //시간이 오래걸림, 수정이 쉬움
commenter:{
name:'~~'
age: ~~의나이,
comment:'~~입니다',
}, //이게 몽고디비의 보통 방법. 이렇게 작성된 것의 단점은 수정이 너무 어려움,
//장점은 시간이 빠름
comment:'~~의 댓글입니다.',
createdAt:new Date(),
}
형식으로 되어 있음. 이 부분은 ObjectId는 타입인데, User의 ObjectId를 참조한다 는 뜻
sequelize의 include, mysql의 join의 역할
mongodb에서 실제로 저장되는 테이블이 종류별로 웬만하면 mySQL을 처리할 수도 있음.
ObjectId가 함수 같아 보이지만 실제는 문자열이라고 생각하면 됨.
const result = await Comment.populate(comment, { path: 'commenter' });
이게 1번 방법. 몽고디비의 몽구스가 comment 안에 commenter을 카피해서 nested object형식으로 다 넣어줌.
objectId를 실제 객체로 바꿔주는 것이 populate 의 특징임.
몽고디비는 $set을 해야되지만, 몽구스는 $set을 안 해도 알아서 잘 넣어줌
몽구스는 where, 값 으로 찾고 수정하지만 mysql은 값,where객체 순으로 넣어줘야 됨.
몽고디비 는 .save(쉘 기준) 였고, 몽구스는 .create
const user=await User.create({
이름:값,
})
실무에서 코드가 바뀌는 것이 없는데 응답하는 개수가 많아진다는 점 때문에 느려지는 것들을 잘 생각해야 됨. 자주 find하는 필드는 index 걸어두기