{merge: true}이(가) 포함된 Firestore 세트와 업데이트 간의 차이점
Cloud Firestore에는 세 가지 쓰기 작업이 있습니다.
add()
set()
update()
문서에는 다음과 같이 나와 있습니다.set(object, { merge: true })
지정한 개체를 기존 문서와 병합합니다.
사용할 때도 마찬가지입니다.update(object)
그래서 무엇이 다른가요?구글이 이런 기능을 복제한다는 것은 이상해 보입니다.
차이를 이해하는 방법:
set
없이.merge
문서가 아직 존재하지 않으면 문서를 덮어쓰거나 문서를 만듭니다.set
와 함께merge
문서의 필드를 업데이트하거나 문서가 없는 경우 필드를 작성합니다.update
필드를 업데이트하지만 문서가 존재하지 않으면 실패합니다.create
문서를 만들지만 문서가 이미 존재하는 경우 실패합니다.
제공하는 데이터의 종류에도 차이가 있습니다.set
그리고.update
.
위해서set
항상 문서 모양의 데이터를 제공해야 합니다.
set(
{a: {b: {c: true}}},
{merge: true}
)
와 함께update
필드 경로를 사용하여 중첩 값을 업데이트할 수도 있습니다.
update({
'a.b.c': true
})
" 병합으로 설정"과 "업데이트" 사이의 또 다른 차이점은 중첩된 값으로 작업할 때입니다.
다음과 같이 구성된 문서가 있는 경우:
{
"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
})
지도에서 중첩된 필드를 삭제하려면 위의 답변에 추가하여 사용할 수 있습니다.update
또는set
사용 사례에 따라 다릅니다.
다음으로 시작하고 다음 이외의 모든 프로필 항목을 제거하려면"user1"
그러면 두 가지 옵션이 있습니다.
{
"users": {
"profiles": {
"user1": ...,
"user2": ...
}
}
갱신하다
덮어씁니다.profiles
무엇이 제공되든 간에
update({
'users.profiles': { 'user1': ... }
})
세트
이렇게 하면 삭제된 내용이 기존 프로필에 병합되어 삭제되지 않은 내용이 남습니다.
set({
users: {
profiles: {
'user2': FieldValue.delete(),
'user3': FieldValue.delete(),
...
}
}
}, { merge: true })
이는 에만 적용됩니다.Map
둘 다set
그리고.update
와 같은 어레이 관련 연산자를 명시적으로 사용하지 않으면 어레이를 덮어씁니다.
무서운 가미 답은 파이어베이스 버전 9에도 적용됩니다.작은 변경 사항은 다음과 같이 고려해야 합니다.
- 사용하다
setDoc
에set
를 들어, 예들어대를 하는 대신에 사하는신용을 합니다.db.collection('users').doc('random-id').set({ 'admin': true });
,사용하다setDoc(doc(db, 'users', 'random-id'), { "admin": true })
- 사용하다
updateDoc
에update
를 들어, 예들어대를 하는 대신에 사하는신용을 합니다.db.collection('users').doc( random-id').update({"age": 27})
,사용하다await updateDoc(doc(db, 'users', 'random-id'), { "age": 27})
언급URL : https://stackoverflow.com/questions/46597327/difference-between-firestore-set-with-merge-true-and-update
'source' 카테고리의 다른 글
SQL*Plus에서 "2"는 무엇을 의미합니까? (0) | 2023.06.26 |
---|---|
스프링 부팅이 시작될 때마다 ElasticSearch 상태 검사가 실패함 (0) | 2023.06.26 |
Linux 셸 스크립트에서 입력을 예/아니오/취소하려면 어떻게 해야 합니까? (0) | 2023.06.26 |
오류: 모듈 '@angular/material'에 내보낸 멤버 "..."이 없습니다. (0) | 2023.06.26 |
Angular - 여러 HTTP 호출을 순차적으로 수행합니다. (0) | 2023.06.26 |