set(data, options)
메서드를 사용하면 document를 만들며, 해당 document가 존재하지 않을 경우에는 새로운 document를 만들어 저장합니다.
두번째 인자로 들어가는 옵션 객체에는merge
값을 입력할 수 있는데요, boolean값을 주어 첫번째 인자로 들어가는data
로 전체 document를 덮어 쓸지, 아니면 해당하는 필드값만 업데이트 할지 결정할 수 있습니다.
document foo
에 { banana:'green', isRipe: false }
라는 값이 들어있습니다.
이제 이 값을 바꿔보겠습니다.
ref.doc('foo').set({ banana: 'yellow' },{ merge: true })
set
을 사용할 때 옵션의 merge
를 true
로 주면 document를 data
로 덮어 씌우는게 아니고, 필드 값을 업데이트하기에 document foo
는 { banana:'yellow', isRipe: false }
가 됩니다.
다시 바꾸어 보겠습니다.
ref.doc('foo').set({ banana:'yellow' })
merge
를 사용하지 않았기에 data
로 document를 덮어 씌우게 되었고,
document foo
는 { banana:'yellow' }
가 됩니다.
update
메서드는 set 메서드의merge: true
가 적용된 것과 같은 기능을 합니다.
하지만 set과 다르게 새롭게 document를 생성하지 않고, 참조하려는 docRef가 존재하지 않을 경우 실패하게 됩니다.
create
메서드는 문서를 생성하고, 생성하려는 docRef에 이미 문서가 존재하는 경우 실패하게 됩니다.
set 메서드가 나오기 이전에 Create,Update 함수가 존재했었고 많이 쓰였기에 레거시로서 삭제하지 않은 것 같습니다.