Node

송은우·2022년 1월 11일
0

자유로운 데이터, 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 걸어두기

profile
학생의 마음가짐으로 최선을 다하자

0개의 댓글