Update를 하는 4가지 방법

woo94·2023년 2월 6일
0

mongoose

목록 보기
1/2

https://masteringjs.io/tutorials/mongoose/update 의 내용을 번역 및 발췌합니다.

Mongoose는 document를 update하는 4가지 방법을 제공해준다:

  • Document#save()
  • Model.updateOne() and updateMany()
  • Document#updateOne()
  • Model.findOneAndUpdate()

save()

Mongoose model document에 save method를 사용하여 update를 진행하는 것이다.
주로 find계열의 method를 사용하여 mongoose model document를 가져와서 원하는 수정사항을 적용한 뒤 save method로 update를 진행하는 방향으로 진행된다:

const doc = await PersonModel.findOne({ name: 'woo' })

doc.age = 30
await doc.save()

Model.updateOne(), Model.updateMany()

Database에서 document를 load하지 않고 update하는 방법에 사용된다. 아래의 예시에서 name: 'woo' 인 사람의 document는 Node.js process memory에 올라가지 않게 된다:

await PersonModel.updateOne({ name: 'woo' }, {
  age: 30
})

Mongoose에서는 가능한한 save method를 사용할것을 권장한다. 하지만 updateOne이나 updateMany가 이점을 가지는 경우들도 있다:

  • updateOne은 atomic하다. find계열의 method로 document를 가져와서 내용을 수정하고 save하는 동안에 document의 수정이 일어날 수 있다.
  • updateOne은 document를 memory에 올리지 않고도 사용이 가능하다. Document의 크기가 큰 경우에는 더 나은 performance를 기대해볼 수 있다.

Document#updateOne()

Model.updateOne의 syntactic sugar이다. 이미 memory에 document가 존재하는 경우 이는 Model.updateOne을 호출해준다.
보통의 경우 잘 사용되지 않는다. saveModel.updateOne()이 사용되고는 한다.

Model.findOneAndUpdate()

Model.findOneAndUpdate 나 이것과 유사한 Model.findByIdAndUpdateupdateOne과 비슷하게 동작한다. Match되는 제일 첫 document를 atomic하게 update시킨다.
updateOne과 가장 큰 차이점으로는, 이 method에서는 update가 완료된 document를 반환시켜준다는 점이다.

정리

AtomicDoc in memoryReturns updated docChange Tracking
Document#save()XOOO
Model.updateOne()OXXX
Model.updateMany()XXXX
Document#updateOne()XOXX
Model.findOneAndUpdate()OXOX
profile
SwiftUI, node.js와 지독하게 엮인 사이입니다.

0개의 댓글