예전에 mongoose로 


doc:{

val1:값,

val2:값,

arr:[배열]

}


이런 테이블이 있을때

arr을 수정하려고 하면 이때까지

doc 찾고 그안에서 arr을 직접 수정한다음에

다시 doc을 업데이트 하는 방식으로 했었음

코드로 요약하자면


schema.findById('doc 아이디',(err,res)=>{

res.arr //doc안에 arr 수정

//수정된 배열

schema.findByIdAndUpdate('doc 아이디', res.arr,[콜백])


}) 


이딴식으로 찾고,바꾸고,다시 덮어쓰고 이짓거리 했는데

js 객체 처럼 그냥 doc을 찾아서 doc.arr.pop() 이런식으로

바로바로 수정하고 다시 저장할 방법없냐 질문 했었는데

오늘 api문서 읽어보고 알아냈음

알고보니 api 시작하기 문서에 있던건데 이제 알았음


위에 처럼 지랄할 필요없이


const doc=await schema.findById('doc 아이디')


먼저 이렇게 doc을 찾아서 가져오고

doc 변수 자체를 그냥 수정이 가능하더라고


doc.val1='수정됨'

doc.val2='ㅇㅇ'


이런식으로 js 객체처럼 그냥 수정한다음

doc.save() 라는거 호출해주면 알아서 수정,저장이됨

이 save()라는 메소드가 일종의 문법 설탕이더라




save 호출하면 몽구스가 알아서 업데이트 쿼리 날려준다고 하네

존나 편한 기능인데 이걸 이제 알았음




근데 또하나 문제가 있었는데

도큐먼트안에 배열을 수정했을땐 반영이 안돼더라

구글에 한번 찾아봤는데 이런 답변이 있었음






배열을 수정했을땐 markModified() 라는걸 호출하라는데

솔직히 이게 무슨메소드고 무슨역할인지 모르겠음

api문서 에서도 설명이 부족해서 뭔지 못알아보겠던데 아무튼 이렇게 해야 배열도 정상적으로 저장되더라