답변:
차이점을 이해 한 방법 :
set
없이는 merge
문서를 덮어 쓰거나 아직 존재하지 않는 경우 생성합니다.
set
와 merge
문서에 필드를 업데이트하거나 존재하지 않는 경우를 작성합니다
update
필드를 업데이트하지만 문서가 없으면 실패합니다.
create
문서를 만들지 만 문서가 이미있는 경우 실패합니다.
set
및에 제공하는 데이터의 종류에도 차이가 있습니다 update
.
들어 set
당신은 항상 문서 형태의 데이터를 제공해야합니다 :
set(
{a: {b: {c: true}}},
{merge: true}
)
와 함께 update
중첩 된 값을 업데이트하기 위해 필드 경로를 사용할 수도 있습니다.
update({
'a.b.c': true
})
set
하는 문서 형태의 데이터에서 작동 한다는 것 update
입니다. update
즉,에서 더 성가신 깊이 중첩 된 값을 변경할 수 있습니다 set
. 예를 들면 : set({a: {b: {c: true}}}, {merge: true})
대 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
}
}`
{ merge: true }
업데이트 기능 과 같은 효과가있는 옵션이 추가 되길 바랍니다 .
update
사용할 때 중첩 된 필드 (위 답변 참조)의 데이터를 덮어 쓰지 않으려면 점 표기법을 사용할 수 있습니다 . update
점 표기법을 사용하거나 사용하지 않으면 의 덮어 쓰기 동작 이 다릅니다.
문서 별 : 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
})
create
API 에서 메소드를 어디에서 찾았 습니까?