대치와 연산자에 의한 업데이트는 둘중 하나만

MongoDB는 [대치에 의한 수정]과 [연산자에 의한 수정]을 지원한다고 했다.

7.1 대치에 의한 수정

7.1 연산자에 의한 수정

만약 이 둘을 섞어 사용하게 되면 update 명령은 실패한다.

// 대치와 연산자가 혼합되어있다 -> 오류
db.products.updateOne({}, {
  'name': 'Jongpak',
  '$addToSet': { 'tags': 'cheap' }
})

// 다음과 같이 해야함 (필드의 값을 바꾸는 것이 의도)
db.products.updateOne({}, {
  '$set': { 'name': 'Jongpak' },
  '$addToSet': { 'tags': 'cheap' }
})

여러 도큐먼트 업데이트와 원자성

여러 도큐먼트를 업데이트 하려면, 명시적으로 multi: true 를 지정하여 여러 도큐먼트에 대해 업데이트를 수행할 것이라는 것을 알려줘야한다.

db.products.update({}, { '$addToSet': { 'tags': 'cheap' } }, { multi: true })

그런데, 업데이트는 도큐먼트 수준에서 원자적이다.