에서 클라우드 경우 FireStore 세 가지 쓰기 작업이 있습니다 :
1) 추가
2) 설정
3) 업데이트
문서에서 사용 set(object, {merge: true})하면 기존 개체와 병합됩니다.
사용할 때도 마찬가지입니다. update(object)
그렇다면 차이점은 무엇입니까? Google이 논리를 복제하는 것이 이상하게 보입니다.
답변
차이점을 이해 한 방법 :
- 
set없이는merge문서를 덮어 쓰거나 아직 존재하지 않는 경우 생성합니다. - 
set와merge문서에 필드를 업데이트하거나 존재하지 않는 경우를 작성합니다 - 
update필드를 업데이트하지만 문서가 없으면 실패합니다. - 
create문서를 만들지 만 문서가 이미있는 경우 실패합니다. 
set및에 제공하는 데이터의 종류에도 차이가 있습니다 update.
들어 set당신은 항상 문서 형태의 데이터를 제공해야합니다 :
set(
  {a: {b: {c: true}}},
  {merge: true}
)
와 함께 update중첩 된 값을 업데이트하기 위해 필드 경로를 사용할 수도 있습니다.
update({
  'a.b.c': true
})
답변
“병합으로 설정”과 “업데이트”간의 또 다른 차이점 (Scarygami의 답변 확장)은 중첩 된 값으로 작업 할 때입니다.
다음과 같은 구조의 문서가있는 경우 :
 {
   "friends": {
     "friend-uid-1": true,
     "friend-uid-2": true,
   }
 }
추가하고 싶습니다 {"friend-uid-3" : true}
이것을 사용하여 :
db.collection('users').doc('random-id').set({
  "friends": {
    "friend-uid-3": true
  }
},{merge:true})
이 데이터가 생성됩니다.
 {
   "friends": {
     "friend-uid-1": true,
     "friend-uid-2": true,
     "friend-uid-3": true
   }
 }
그러나 update이것을 사용하여 :
db.collection('users').doc('random-id').update({
  "friends": {
    "friend-uid-3": true
  }
})
이 데이터가 생성됩니다.
 `{
   "friends": {
     "friend-uid-3": true
   }
 }`
답변
문서 별 : https://firebase.google.com/docs/firestore/manage-data/add-data#update_fields_in_nested_objects
점 표기법을 사용하면 다른 중첩 필드를 덮어 쓰지 않고 단일 중첩 필드를 업데이트 할 수 있습니다. 점 표기법없이 중첩 된 필드를 업데이트하면 전체 맵 필드를 덮어 씁니다.
위에서 언급했듯이 이것은 전체 친구 구조를 대체합니다.
db.collection('users').doc('random-id').update({
    "friends": {
        "friend-uid-3": true
    }
})
그렇지 않습니다.
db.collection('users').doc('random-id').update({
    "friends.friend-uid-3": true
})
